ListView SelectedIndexChanged事件没有选定项目问题

时间:2010-08-27 16:39:20

标签: c# winforms listview selectedindexchanged

我正在使用一个小型的C#3.5 WinForms应用程序,它将事件日志名称从服务器抓取到列表视图中。选择其中一个项目后,使用SelectedIndexChanged事件通过获取SelectedItems集合中第一个项目的text属性,使用SelectedIndexChanged事件中的事件日志条目填充另一个列表视图,如下所示。

string logToGet = listView1.SelectedItems[0].Text;

第一次工作正常,但第一次列表视图中第二次选择事件日志名称失败。发生的事情是SelectedIndexChanged事件获取的SelectedItems集合是空的,因此我得到了ArgumentOutOfRangeException。

我不知所措。关于我做错了什么或更好的方法来做任何想法?

4 个答案:

答案 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而引起的。对其他人可能有用。