当ListView处于虚拟模式时,无法访问所选项集合?

Moh*_*yan 4 c# listview selecteditem virtualmode

我在虚拟模式下有一个ListView.我想进入SelectedItems物业.
但是当我使用时ListView1.SelectedItems,我收到以下异常:

Cannot access the selected items collection when the ListView is in virtual mode
Run Code Online (Sandbox Code Playgroud)

如何ListView1.SelectedItems在VirtualMode中访问.

Mar*_*usz 14

这是相当古老的帖子,但也许其他人会受益.

只需使用ListView.SelectedIndexCollection col = listView.SelectedIndices; 然后您就可以访问一个项目:

forearch(var item in col)
{
   string txt = listView.Items[item].Text;
}
Run Code Online (Sandbox Code Playgroud)

..但是你将无法使用foreach迭代ListView.Items,因为在这种模式下没有可用的迭代器.使用索引器只是飞得很好:-)

尝试使用foreach时会出现异常:

当ListView处于虚拟模式时,您无法使用枚举器枚举ListView项集合或调用GetEnumerator.请改用ListView项目索引器,并按索引值访问项目.


Moh*_*yan -3

我已经通过以下代码完成了此操作,但是当选择多个项目时会出现异常:

\n\n
\n

指数超出范围。必须为非负数且小于集合的大小。\n 参数名称:index

\n
\n\n
List<ListViewItem> ListViewItems = new List<ListViewItem>();\n\nforeach (int index in listView1.SelectedIndices)\n{\n    ListViewItem SelectedListViewItem = listView1.Items[index];  // exception\n    ListViewItems.RemoveAt(index);\n}\n\xe2\x80\xa6\n\nvoid listView1_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)\n{\n    e.Item = ListViewItems[e.ItemIndex];\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

每当您从集合中删除项目时,请始终从最大索引迭代到最小索引,如下所示:

\n\n
for (int index = listView1.SelectedIndices.Count - 1; i >= 0; i--)\n{\n    \xe2\x80\xa6\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是因为,每次删除集合中的项目时,如果不从最大索引迭代到最小索引,索引就会发生变化。

\n