我正在寫一個WinForms程序來調整圖像大小,在C#中。如何獲取圖像ListView中選定項目的索引?
我有一個ListView。此ListView中的項目是來自ImageList的圖像。
當用戶將圖像拖放到表單上時,會填充ImageList和ListView。
我還創建了兩個字符串數組,imageFilePaths []和imageFileNames [](這些都是不言而喻的),它們與ImageList和ListView同時填充。
由於這些對象的所有四個都穿過的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
嘿,請看我編輯的 –