2016-05-06 43 views
0

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

任何想法,为什么我得到这个错误?我试图寻找它,但我还没有找到类似的情况。 这是代码的一部分,我得到这个错误:

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

回答

1

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

或者可能没有选择任何东西? (请注意,SelectionChanged事件被调用时Item未选择以及!)

注意,在ListViewItem可以有子项目自己的号码不管你有多少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中都更大!

+0

好吧,我现在明白了,但为了访问这些子项目,我需要更改哪些内容?因为目的是用数据填充每个字段。谢谢! –

+0

他们必须__exist__,所以你需要每个__create/add__。但也许错误是在'SelectedItems [0]'?使用调试器找出哪两个索引器引发异常! – TaW

相关问题