2016-05-06 9 views
0

私は7列のリストビューを持っています。それぞれの列に情報を追加したいのですが、listViewからサブアイテム2に到達すると、そのサブアイテムがあってもSystem.ArgumentOutOfRangeExceptionになります。listview- System.ArgumentOutOfRangeException

なぜこのエラーが発生するのですか?私はそれを検索しようとしましたが、私は同様のケースを発見していません。 これは私がそのエラーを取得するコードの一部です:あなたはおそらく項目にすべてそれらのサブアイテムを持っていない

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

答えて

1

おそらく何も選択されていませんか? (SelectionChangedイベントはItemも同様非選択あるときに呼び出されることに注意してください!)ListView内のすべてのItemを持つことができます

注意に関係なく、あなたが作成したどのように多くのColumnsサブアイテム、の独自の番号 。これらは、の表示には、のデータを表示するだけのスペースを提供し、SubItemsを作成せずにアクセスすることはできません。

したがって、アクセスする前にテストする必要があります。つまり、ListView構造はであり、2次元配列ではなく、ギザギザの配列です!

これは可能チェックすることができ..:..

だけ依存しない方が良いあなたのコードを知っていると..but

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

+0

今、理解していますが、それらのサブアイテムにアクセスするには何を変更する必要がありますか?それぞれのフィールドにデータを入力することが目的です。ありがとうございました! –

+0

これらは__exist__する必要があります。したがって、それぞれを__create/addする必要があります。しかし、おそらく、エラーは 'SelectedItems [0]'にあったでしょうか?デバッガを使用して、2つのインデクサのどれが例外をスローするかを調べます。 – TaW

関連する問題