이미지 크기를 조정하기위한 WinForms 프로그램을 C#으로 작성했습니다.이미지 ListView에서 선택한 항목의 인덱스를 가져 오는 방법은 무엇입니까?
나는 ListView를 가지고있다. 이 ListView의 항목은 ImageList의 이미지입니다.
ImageList 및 ListView는 사용자가 이미지를 끌어 양식에 놓을 때 채워집니다.
또한 ImageList 및 ListView와 동시에 채워지는 imageFilePaths [] 및 imageFileNames [] (두 가지 문자열 배열)를 만들었습니다. 이러한 개체의 네 가지로
은 의해, dragDrop 방법의 반복을 통해 채워, 그렇게하는 의 ImageList, ListView를, imageFilePaths [] 및 imageFileNames [] 완벽 일치하는 최대의 인덱스.
ListView에 대한 이벤트 수신기가 있습니다. ListView의 항목을 클릭하면 ListView.SelectedItems 인덱스와 일치하는 인덱스 위치에 앞서 언급 한 배열의 파일 이름과 파일 경로가 표시됩니다. 코드는 다음과 같습니다.
private void imageListView_SelectedIndexChanged(object sender, EventArgs e)
{
foreach (ListViewItem item in imageListView.SelectedItems)
{
int imgIndex = item.ImageIndex;
if (imgIndex >= 0 && imgIndex < imageList1.Images.Count)
{
filenameTb.Text = imageFileNames[imgIndex];
updateDimensions(imageFilePaths[imgIndex]);
}
}
}
이 방법은 효과가 있지만 좋지는 않습니다. 예를 들어 ListView에 20 개의 이미지가 있고 Shift 키를 누른 채로 항목을 영역 선택하려고하면 약 10-20 초가 걸려 모든 필드가 강조 표시됩니다. '선택 항목 제거'버튼이 있기 때문에 이것은 나에게 중요합니다. 항목을 '선택 취소'하는 데 오랜 시간이 걸립니다.
이 이벤트 리스너가 모든 단일 항목을 반복하므로 꼭 필요한 항목이 아니더라도 마지막 항목에 도달 할 때까지 각 선택된 항목의 크기와 파일 이름이 표시되므로 이것이 95 %라는 것을 확신합니다.
선택한 항목 만 색인을 가져올 수 있도록 여러 항목을 선택하거나 여러 항목을 선택한 경우 색인의 마지막 색인을 다시 작성할 수 있습니까?
감사
는편집 : 의견을 바탕으로, 나는 SelectedIndices 속성을 조회하고,이 시도했다 : ...
private void imageListView_SelectedIndexChanged(object sender, EventArgs e)
{
ListView.SelectedIndexCollection indexes = this.imageListView.SelectedIndices;
foreach (int index in indexes)
{
filenameTb.Text = imageFileNames[index];
updateDimensions(imageFilePaths[index]);
}
}
그것은 그러나 아직도 고통스럽게 느린
인덱스 만 사용하면 호출자에게 전체 항목을 끊임없이 반환하지 않도록 사용할 수있는 ListView에 'SelectedIndices' 속성이 있다고 생각합니다. – TheLethalCoder
[다중 선택 목록 상자에서 마지막으로 선택한 항목을 얻는 방법?] (http://stackoverflow.com/questions/305555/how-to-get-the-last-selected-item-in-multiselect-listbox) 가능한 복제본 – TheLethalCoder
어이, 내가 만든 편집을보세요. –