3

個別にチェックまたはチェック解除できる多くの項目を含むCheckedListBoxがあります。

この隣には、反対側の多くのアイテムのスーパーセットを表すチェックボックスがあります。これらは、アイテムのどの部分が反対に選択されたかに対応するトライステートです。

CheckedListBoxと個々のCheckBoxの両方が、循環参照とオーバーフローを引き起こしている変更されたタイプのイベントをチェックするようにサブスクライブします。プログラムで一方が更新しているときに、一方が変更イベントを受信しないようにするにはどうすればよいですか?

4

1 に答える 1

2
void checkBox1_N_CheckStateChanged(object sender, EventArgs e) {
    checkedListBox1.ItemCheck -= this.CheckedListBox1_ItemCheck;
    // Handler body where affecting CheckedListBox1.
    checkedListBox1.ItemCheck += this.CheckedListBox1_ItemCheck;
}

相手が更新しているときに、お互いのイベントハンドラーを無効にするのが最適です。

void CheckedListBox1_ItemCheck(object sender, EventArgs e) {
    //Find which 'i' is affected.
    arrOfCBox[i].cb.CheckStateChanged -= arrOfCBox[i].eh;
    // Handler body where affecting checkBox[i].
    arrOfCBox[i].cb.CheckStateChanged += arrOfCBox[i].eh;
}

ここで、BoxHandlerは少なくとも次のとおりです。

    class BoxHandler
    {
        public EventHandler eh;
        public CheckBox cb;
    }

WinFormsに似ています:イベントハンドラーを一時的に無効にしますが、驚くべきことに、それは答えを与えられませんでした(ひどく抽象的すぎますか?)。

于 2011-09-17T23:11:37.910 に答える