我正在使用一个小型的C#3.5 WinForms应用程序,它将事件日志名称从服务器抓取到列表视图中。选择其中一个项目后,使用SelectedIndexChanged事件通过获取SelectedItems集合中第一个项目的text属性,使用SelectedIndexChanged事件中的事件日志条目填充另一个列表视图,如下所示。
string logToGet = listView1.SelectedItems[0].Text;
第一次工作正常,但第一次列表视图中第二次选择事件日志名称失败。发生的事情是SelectedIndexChanged事件获取的SelectedItems集合是空的,因此我得到了ArgumentOutOfRangeException。
我不知所措。关于我做错了什么或更好的方法来做任何想法?
答案 0 :(得分:13)
是的,原因是当您选择另一个项目时,ListView会在选择新项目之前取消选择SelectedItem,因此计数将从1变为0,然后再次变为1。修复它的一种方法是在尝试使用它之前检查SelectedItems集合是否包含一个项目。你这样做的方式很好,你只需要考虑到这一点
例如
if (listView1.SelectedItems.Count == 1)
{
string logToGet = listView1.SelectedItems[0].Text;
}
答案 1 :(得分:1)
在尝试从中检索值之前,应检查SelectedItems集合中是否包含值。
类似的东西:
if(listView1.SelectedItems.Count > 0)
//Do your stuff here
答案 2 :(得分:0)
选择新项目时,首先取消选择上一项目。快速检查您的代码:
if( listView1.SelectedItems.Count > 0)
{
string logToGet = listView1.SelectedItems[0].Text;
}
这将忽略所选项目更改为无选定项目。
答案 3 :(得分:0)
我遇到了这个问题,在花了太多时间之后,我意识到这个问题是由于尝试从另一个线程获取listView1.SelectedItems而引起的。对其他人可能有用。