我有一个 CheckedListBox ,其中包含许多可以单独选中或取消选中的项目。
旁边是 CheckBoxes 代表许多相对项目的超集。这些是三态的,对应于它们的项目的哪个部分被选择相反。
CheckedListBox 和单个 CheckBox 都订阅检查导致循环引用和溢出的更改类型事件。当另一个以编程方式更新它时,如何禁用一个接收更改事件?
我有一个 CheckedListBox ,其中包含许多可以单独选中或取消选中的项目。
旁边是 CheckBoxes 代表许多相对项目的超集。这些是三态的,对应于它们的项目的哪个部分被选择相反。
CheckedListBox 和单个 CheckBox 都订阅检查导致循环引用和溢出的更改类型事件。当另一个以编程方式更新它时,如何禁用一个接收更改事件?
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:暂时禁用事件处理程序,但令人惊讶的是,它没有得到答案,(太抽象了?)。