3

我有一个 CheckedListBox ,其中包含许多可以单独选中或取消选中的项目。

旁边是 CheckBoxes 代表许多相对项目的超集。这些是三态的,对应于它们的项目的哪个部分被选择相反。

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 回答