C# 从ListView C中选择第二项时出错

C# 从ListView C中选择第二项时出错,c#,winforms,listview,C#,Winforms,Listview,我有一个列表视图,其multiselect属性设置为false。当用户单击它时,我获取列表视图项的NAME属性并将其转换为十进制,然后将其提供给加载正确记录的方法 当我选择一个项目时,不管列表中有多少项目,也不管我选择了哪个项目,下面的代码都能完美地工作 private void ListInstruments_SelectedIndexChanged(object sender, EventArgs e) { ListViewItem s

我有一个列表视图,其multiselect属性设置为false。当用户单击它时,我获取列表视图项的NAME属性并将其转换为十进制,然后将其提供给加载正确记录的方法

当我选择一个项目时,不管列表中有多少项目,也不管我选择了哪个项目,下面的代码都能完美地工作

        private void ListInstruments_SelectedIndexChanged(object sender, EventArgs e)
        {
            ListViewItem selection = listInstruments.SelectedItems[0];
            if (selection != null)
            {
                 string strSelection = selection.Name;
                 SelectedInstrumentID = Convert.ToDecimal(strSelection);
                 LoadSelectedInstrument();                
            }
        }
当我进行第二次选择时,不是多选,而是从列表框中进行不同的选择,我会在引用listInstruments时出错。SelectedItems[0]

System.ArgumentOutOfRangeException消息=InvalidArgument=的值 “0”对于“索引”无效。参数名称:索引 Source=System.Windows.Forms

任何帮助都将不胜感激。

可能未选择任何项目,因此list.SelectedItems为空;您试图从空集合中获取第0项,因此引发异常。快速补丁是

 // instead of original
 // ListViewItem selection = listInstruments.SelectedItems[0];
 ListViewItem selection = list.SelectedItems.Count > 0 
   ? listInstruments.SelectedItems[0] // the collection has at least one item
   : null;                            // if the collection is empty
或者我们可以检查是否有选择,当没有选择时返回

 private void ListInstruments_SelectedIndexChanged(object sender, EventArgs e)
 {
    if (list.SelectedItems.Count <= 0)   
        return; 

    listViewItem selection = listInstruments.SelectedItems[0];

    string strSelection = selection.Name;
    SelectedInstrumentID = Convert.ToDecimal(strSelection);
    LoadSelectedInstrument();  
 }

检查是否可以从EventArgs e获取索引,而不是SelectedItems[0]。像e.Index之类的东西?在SelectedItems[e.Index]中使用它,我将尝试一下,谢谢。这是我的想法,但似乎空白点击是由is not null检查处理的,我只是做了一点不同。我肯定是在列表视图项目上进行选择。哦,等等,我明白你的意思了。因为声明失败,它永远不会进入null检查。@Ray Delien:您正试图从空集合中获取第0项,因为集合没有第0项,它是空的,所以引发了异常[不仅仅是学习挑战]当通过选择列表框项目触发事件时,集合怎么可能是空的?@Ray Delien:请注意,该事件已被选择索引更改,因此,当您取消选择项目时,索引将从(例如)123以前选择的项目索引更改为-1,不会选择任何项目,事件将以空列表触发。SelectedItems集合