listview- System.ArgumentOutOfRangeException

时间:2016-05-06 23:04:51

标签: c# listview outofrangeexception subitem

我有一个包含7列的列表视图。我想在每列上添加信息,但是当它从listView到达子项2时,我得到System.ArgumentOutOfRangeException,即使我有该子项。

知道我为什么会收到这个错误吗?我试图搜索它,但我还没有发现类似的情况。 这是我得到该错误的代码的一部分:

if (seen == true)
            listView1.SelectedItems[0].SubItems[2].Tag = "Seen";
        else
            listView1.SelectedItems[0].SubItems[2].Tag = "Not Seen";

1 个答案:

答案 0 :(得分:1)

您可能在每个项目中没有所有这些子项目。

或者可能没有选择任何东西? (请注意,当<div class="outer"> <div class="inner"> Hover me box </div> </div> 未选中时,系统会调用SelectionChanged事件!)

请注意Item中的每个Item都可以 SubItems ,无论您ListView多少Columns已经创造出来了。这些只提供了显示数据的空间,而不是在不创建SubItems的情况下可以访问的插槽!

因此我们必须在访问之前对其进行测试!换句话说:ListView结构不是2d数组而是锯齿状数组

这可能是一个可能的检查..:

if ( listView1.SelectedItems[0].Count > 0 &&     
     listView1.SelectedItems[0].SubItems.Count > 2 )
   listView1.SelectedItems[0].SubItems[2].Tag = seen ?  "Seen" :  "Not Seen";

..但你更了解你的代码,并且很可能找到一种更好的方法来进行必要的测试..

只是不要依赖SubItems的数量等于Columns的数量。它们根本不相关, 可能在每个Item中更大!