InvalidArgument =值为'6'对索引无效。参数名称:index

时间:2011-10-24 03:46:32

标签: c# winforms listview

我创建了一个包含8列的Listview控件。当我需要从Item的子项中检索文本时,我使用以下代码:

foreach (ListViewItem item in listViewStatus.Items)
            {
                if (item.Tag == f)
                {
                    /* Use locking to synchronise across mutilple thread calls. */
                    lock (_lockObject)
                    {
                        item.SubItems[6].Text = Status;
                    }
                    break;
                }
            }

它显示了一个例外。但是当我用item.SubItems [5] .Text替换item.SubItems [6] .Text时,它可以工作。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:0)

显然,SubItems中最多有6列

答案 1 :(得分:0)

如果你只创建了6,则值为0-5;意思是6无效。

答案 2 :(得分:0)

这是一个经典的“逐个”错误情景。

指标分为两种:零基础和一基础。 C#是一种从零开始的索引语言。我假设你是第一次学习语言,或者是第一次学习零语言 - 否则,我错过了问题的重点,我道歉。 :)

请参阅Wikipedia,Off-By-One错误:http://en.wikipedia.org/wiki/Off-by-one_error

运行时,当它意识到列表中没有第7项时,抛出ArgumentOutOfRange异常。由于列表可能随时包含任意数量的值,因此无法在编译时捕获此类错误(不使用启发式方法)

<强> TLRD;

从零开始(C#):

... = myList[0]; // This is a zero-based indexer.
... = myList[1];
... = myList[2];
... = myList[3];
... = myList[4];
... = myList[5]; // This is the 6th item, although the index is 5.

One-Based(其他一些语言):

... = myList[1]; // This is a one-based indexer.
... = myList[2];
... = myList[3];
... = myList[4];
... = myList[5];
... = myList[6]; // This is the 6th item, and the index is 6.

答案 3 :(得分:0)

SubItems[6]

6表示列索引而不是行的索引。