【问题标题】:listview- System.ArgumentOutOfRangeExceptionlistview- System.ArgumentOutOfRangeException
【发布时间】:2016-05-06 23:04:50
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# listview outofrangeexception subitem


    【解决方案1】:

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

    或者可能没有选择任何内容? (请注意,Item未选择时会调用SelectionChanged 事件!)

    请注意,无论您创建了多少个ColumnsListView 中的每个Item 都可以有自己的数量子项。这些只提供了一个空间来显示数据,而不是您可以在不创建 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中的任何一个都可能更大!

    【讨论】:

    • 好的,我现在明白了,但是我必须更改什么才能访问这些子项?因为目的是用数据填充每个字段。谢谢!
    • 它们必须存在,因此您需要创建/添加每个。但也许错误在SelectedItems[0]?使用调试器找出两个索引器中的哪个抛出了异常!
    猜你喜欢
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多