2011-10-24 5 views
0

私は8列のリストビューコントロールを作成しました。 Itemのサブアイテムからテキストを取得する必要がある場合は、次のコードを使用します。InvalidArgument =値 '6'はインデックスには無効です。パラメータ名:index

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 [6] .Textをitem.SubItems [5] .Textに置き換えると、それは機能します。これをどうすれば解決できますか?

+0

item.SubItemsには何回ありますか?おそらくitem.SubItems.Count()? – Zenwalker

+0

それは6を示します。しかし、私は8列 –

+0

ああがあります。 SubItemを作成すると、私は6.を作成するだけです:D –

答えて

0

あなたはわずか6を作成した場合はもちろん、あなたが、サブアイテム

0

中で最も6列を持っている、値は0-5です。 6は無効であることを意味します。

0

これは古典的な「オフバイワン」エラーのシナリオです。

Indiciesには、ゼロベースと1ベースの2つの味があります。 C#はゼロベースのインデックス言語です。私はあなたが最初に言語を学んでいる、または初めてゼロベースの言語を学んでいると仮定します。そうでなければ、質問のポイントを逃しています。私はお詫びします。 :)

はウィキペディアを参照してください、off-by-oneエラー:それは第七項目がリストに存在しないことを認識したときにhttp://en.wikipedia.org/wiki/Off-by-one_error

は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. 

1ベース(いくつかの他の言語)が

... = 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. 
0
SubItems[6] 

6は列インデックスではない行のインデックスを表します。 。

関連する問題