【问题标题】:Prevent circular event chaining on UI controls when updated programmatically以编程方式更新时防止 UI 控件上的循环事件链
【发布时间】:2011-11-19 11:25:52
【问题描述】:

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

在这旁边是代表许多相对项目的超集的复选框。这些是三态的,对应于它们的项目的哪一部分被选中。

CheckedListBox 和单个 CheckBox 都订阅检查导致循环引用和溢出的更改类型事件。如何在另一个以编程方式更新它时禁用一个接收更改事件?

【问题讨论】:

    标签: c# .net events checkbox checkedlistbox


    【解决方案1】:
    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: temporarily disable an event handler,但令人惊讶的是,它没有得到答案,(太抽象了?)。

    【讨论】:

      猜你喜欢
      • 2011-12-26
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      • 2011-01-09
      相关资源
      最近更新 更多