0

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

知道为什么我会收到此错误吗?我试图搜索它,但我没有找到类似的案例。这是我收到该错误的代码部分:

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

4

1 回答 1

1

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

或者也许什么都没有选择?(请注意,当取消选择an时也会SelectionChanged调用该事件!)Item

请注意,每个Itemin aListView都可以有自己SubItems数量,无论Columns您创建了多少。这些仅提供显示数据的空间,而不是您无需创建即可访问​​的插槽SubItems

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

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

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

于 2016-05-06T23:14:39.753 回答