2011-09-21 3 views
5

私は次のコードを経由して、リストビューに(C#のWinFormsのアプリ)の項目を追加している。しかしはなぜチェックされた項目を追加した後にチェックされていないことを示すリストビュー火災のイベントを行います

var IT = new ListViewItem(Term); 
IT.Checked = true; 
MyListView.Items.Add(IT); 

、すぐに私が受け取る項目を追加した後アイテムがチェックされていないことを示すイベント(e.Item.Checkedがfalse)

次に、それがチェックされている(e.Item.Checkedが真である)ことを示す次のイベントを受け取ります。

最初のイベントはなぜ受けられますか?アイテムをリストに追加すると何らかの理由でcheckedプロパティがfalseに設定されていますか?イベントにイベントを追加する前に、チェックされたステータスをtrueに設定しているので、奇妙に思えます。

大変助かりました。前もって感謝します。

+1

あなたはどのようにイベントに登録しましたか? – thekip

+0

を参照して、これらのイベントハンドラ、そのイベントハンドラ、およびリストビューへのバインド方法を確認する必要があります。 –

+0

ビジュアルスタジオのイベントハンドラを 'ItemChecked'イベントに関連付けます。 – Richard

答えて

12

ListViewItemのCheckBoxがListViewに追加されたときに、ItemCheckedイベントを発生させるように初期設定されているように見えます。

この場合、チェックボックスは、イベントを再度発生させるIT.Checked = true;と一致するようにチェックされています。

これは設計によるもので、ロード時にこれらのイベントが発生するのを止める方法はないと思います。

ListViewがロードされ、その後にListItemへの参照が保持されるまで、これはnullであるため、(ハックではありますが)リストビューのFocusedItemプロパティを確認することがあります。

void listView1_ItemChecked(object sender, ItemCheckedEventArgs e) 
{ 
    if (listView1.FocusedItem != null) 
    { 
     //Do something 
    } 
} 

希望します。

+0

ありがとうございました。あなたが正しい。コールスタックを見ると、チェックされたプロパティが実際にfalseに設定されていることがわかります。その後、アイテムを追加した後、再びtrueに戻ります。私は実際にもう一度真実に戻ってくることに少し驚いていますが、それにもかかわらず、これは行動のようです。 – Richard

関連する問題