我正在写一个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
嘿,请看我编辑的 –