2010-08-27 18 views
5

我有一个小的C#3.5 WinForms应用程序我正在努力抓住事件日志名称从服务器到列表视图。当选择其中一个项目时,通过抓取SelectedItems集合中第一个项目的文本属性,使用SelectedIndexChanged事件从另一个列表视图中填入选定事件日志中的事件日志条目,如下所示。ListView SelectedIndexChanged事件没有选定的项目问题

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

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

我不知所措。关于我在做什么错误的任何想法或更好的方法来做到这一点?

回答

12

是的,原因是当您选择另一个项目时,ListView在选择新项目之前取消选择SelectedItem,因此计数将从1再次变为0,然后再次变为1。解决这个问题的一种方法是在尝试并使用SelectedItems集合之前检查它是否包含项目。你正在做的这是很好的方式,你只需要考虑到这一点

if (listView1.SelectedItems.Count == 1) 
{ 
    string logToGet = listView1.SelectedItems[0].Text; 
} 
1

你应该检查你试图从中检索值前SelectedItems集合在它的值。

喜欢的东西:

if(listView1.SelectedItems.Count > 0) 
    //Do your stuff here 
0

当您选择一个新的项目,原来的项目是未选择的第一位。在快速检查中包装您的代码:

if(listView1.SelectedItems.Count > 0) 
{ 
string logToGet = listView1.SelectedItems[0].Text; 
} 

这会忽略选定的项目更改为没有选定的项目。