0

7列のリストビューがあります。各列に情報を追加したいのですが、listView からサブアイテム 2 に到達すると、そのサブアイテムSystem.ArgumentOutOfRangeExceptionがあるのに が表示されます。

このエラーが発生する理由は何ですか? 調べてみましたが、同じような事例はありませんでした。これは、そのエラーが発生するコードの一部です。

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

4

1 に答える 1

1

おそらく、各アイテムにすべてのサブアイテムが含まれているわけではありません。

それとも、何も選択されていませんか?(が選択さSelectionChangedれていない場合にもイベントが呼び出されることに注意してください!)Item

作成した数に関係なく、すべてItemの aに独自の数SubItemsListViewを含めることができることに注意してください。これらはデータを表示するスペースを提供するだけで、作成せずにアクセスできるスロットは提供しません!ColumnsSubItems

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

これは可能なチェックである可能性があります..:

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!

于 2016-05-06T23:14:39.753 に答える