C# ListView SelectedIndexChanged事件无所选项目问题
我正在开发一个小型的C#3.5 WinForms应用程序,它将事件日志名称从服务器抓取到列表视图中。选择其中一个项目时,另一个listview将使用SelectedIndexChanged事件,通过抓取SelectedItems集合中第一个项目的文本属性,使用所选事件日志中的事件日志条目填充,如下所示C# ListView SelectedIndexChanged事件无所选项目问题,c#,winforms,listview,selectedindexchanged,C#,Winforms,Listview,Selectedindexchanged,我正在开发一个小型的C#3.5 WinForms应用程序,它将事件日志名称从服务器抓取到列表视图中。选择其中一个项目时,另一个listview将使用SelectedIndexChanged事件,通过抓取SelectedItems集合中第一个项目的文本属性,使用所选事件日志中的事件日志条目填充,如下所示 string logToGet = listView1.SelectedItems[0].Text; 这在第一次可以正常工作,但是从第一个listview第二次选择事件日志名称失败。发生的情况是
string logToGet = listView1.SelectedItems[0].Text;
这在第一次可以正常工作,但是从第一个listview第二次选择事件日志名称失败。发生的情况是SelectedIndexChanged事件获取的SelectedItems集合为空,因此我获取ArgumentOutOfRangeException
我不知所措。你知道我做错了什么吗?或者有更好的方法吗?是的,原因是当你选择另一个项目时,列表视图会在选择新项目之前取消选择SelectedItem,因此计数会从1变为0,然后再变为1。解决此问题的一种方法是,在尝试使用SelectedItems集合之前检查它是否包含项。你这样做很好,你只需要考虑到这一点 乙二醇
在尝试从SelectedItems集合中检索值之前,应检查其中是否包含值 比如:
if(listView1.SelectedItems.Count > 0)
//Do your stuff here
选择新项目时,将首先取消选择上一个项目。快速检查代码:
if( listView1.SelectedItems.Count > 0)
{
string logToGet = listView1.SelectedItems[0].Text;
}
这将忽略所选项目更改为无所选项目。我遇到了这个问题,在花了太多时间后,我意识到问题是因为试图从另一个线程获取listView1.SelectedItems。它可能对其他线程有用。我认为从不同线程访问控件将提供完全不同的
异常。
if( listView1.SelectedItems.Count > 0)
{
string logToGet = listView1.SelectedItems[0].Text;
}