【问题标题】:listview to string exception thrownlistview 到字符串抛出异常
【发布时间】:2010-12-01 04:13:33
【问题描述】:

我正在做的是我正在使用

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

要捕获我选择的列表视图项目的项目,这在第一次工作正常,当我单击另一个列表视图项目时,它会抛出异常

InvalidArgument=“0”值对“索引”无效。 参数名称:索引

有什么想法吗?

    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();
        }

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    如果列表视图中没有选择任何项目怎么办?该集合将包含零个项目,并且会引发此异常。

    相反,获取 ListViewItemCollection 并使用 foreach 对其进行迭代。如 MSDN 示例中所述: ListView.SelectedListViewItemCollection 早餐 = 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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        正如@Jeffrey L Whitledge 在他的回答中显示的那样,您可以使用SelectedItems.Count 来确定是否选择了任何项目。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-01-26
          • 1970-01-01
          • 2016-04-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多