我有一个包含7列的列表视图。我想在每列上添加信息,但是当它从listView到达子项2时,我得到System.ArgumentOutOfRangeException
,即使我有该子项。
知道我为什么会收到这个错误吗?我试图搜索它,但我还没有发现类似的情况。 这是我得到该错误的代码的一部分:
if (seen == true)
listView1.SelectedItems[0].SubItems[2].Tag = "Seen";
else
listView1.SelectedItems[0].SubItems[2].Tag = "Not Seen";
答案 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
中更大!