listview到抛出的字符串异常

时间:2010-11-30 19:39:46

标签: c# winforms

我正在使用的是

string proj = listView2.SelectedItems[0].ToString();

捕获我选择的listview项目的项目,这在第一个工作正常,当我点击另一个listview项目时它会抛出

的例外
  

InvalidArgument =值'0'对'index'无效。   参数名称:index

有什么想法吗?

    private void listView2_SelectedIndexChanged(object sender, EventArgs e)
    {
       string proj = listView2.SelectedItems[0].ToString();
    }

工作:

        string proj ="";
        ListView.SelectedListViewItemCollection lv2si =
        this.listView2.SelectedItems;

        foreach (ListViewItem item in lv2si)
        {
            proj = item.ToString();
        }

3 个答案:

答案 0 :(得分:1)

如果在listview中没有选择任何项目怎么办?该集合将包含零项,它将抛出此异常。

相反,获取ListViewItemCollection并使用foreach迭代它。如MSDN示例中所述: ListView.SelectedListViewItemCollection breakfast =             this.ListView1.SelectedItems;

    double price = 0.0;
    foreach ( ListViewItem item in breakfast )
    {
        price += Double.Parse(item.SubItems[1].Text);
    }

http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.selecteditems.aspx

答案 1 :(得分:1)

在访问索引值之前,您应该测试索引值是否有效。

private void listView2_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    string proj;
    if (listView2.SelectedItems.Count > 0)
        proj = listView2.SelectedItems[0].ToString(); 
    else
        proj = string.Empty;
} 

答案 2 :(得分:1)

只要Selected的{​​{1}}属性发生更改,就会引发SelectedIndexChanged事件。这意味着事件被引发两次:一次取消选择第一个项目,第二次选择您单击的项目。由于您没有检查ListViewItem是否有任何项目,因此您在第一次提出事件时会收到异常。

正如@Jeffrey L Whitledge在答案中所示,您可以使用SelectedItems来确定是否选择了任何项目。