【问题标题】:How to prevent event firing after programmatically interacting with controls?以编程方式与控件交互后如何防止事件触发?
【发布时间】:2016-05-29 17:02:47
【问题描述】:

我有一个 CheckedBoxList。我还附加了一个ItemCheck 事件,因此在我检查了一个项目后执行了一个函数。但问题是,在我的程序中的某一时刻,我需要以编程方式检查/取消选中项目。而这个动作会触发事件功能。

我的猜测是也适用于其他控件。

如何防止此类行为?我需要仅在用户与之交互时才运行函数,而不是在我在应用程序中使用控件执行某些操作时运行。

【问题讨论】:

  • 只需放置一个只有 onClick_Event 才会为真的标志。并使用 onChange_Event 来查看复选框状态。条件将决定您更改的项目是否已被点击!简单
  • 另一个选项 - 使用您的逻辑覆盖 onevent 的自定义控件

标签: c# user-interface events event-handling controls


【解决方案1】:

您可以将所有对 CheckedBoxList 的更改包装在一个函数中,并每次都使用该函数。代码可能如下所示:

private void UpdateCheckedListBox() // You would need to add your parameters
{
    checkedListBox1.ItemCheck -= checkedListBox1_ItemCheck;
    // your changes to checked list box goes here
    checkedListBox1.ItemCheck += checkedListBox1_ItemCheck;
}

【讨论】:

  • 怎样做更容易、更自然?设置布尔标志或添加 - 删除事件绑定?我同意投票需要解释。但你是这种伏击的唯一受害者吗?上帝帮助我们所有人。
  • 一个问题的答案需要满足它的要求。它可能不会更好,但它可以解决 OP 的问题。如果有其他方法可以做某事,那么我认为让别人知道它并没有什么坏处。
  • 这给了我一个好主意!
【解决方案2】:

使用标志

private bool _updating;

void CheckedBoxList_ItemCheck(sender object, EventArgs e)
{
    if (_updating)  return;

    // Execute item check code
}

void SomewhereElse()
{
    _updating = true;
    try {
        // programmatically check/uncheck items
    } finally {
        _updating = false;
    }
}

try/finally 语句确保即使发生异常或 try 代码块与 return(或循环内的 break)一起保留,也不会设置标志。

【讨论】:

    【解决方案3】:

    首先在表单级别创建布尔变量:

    bool dontUpdate = false;
    

    然后在您的 Checklist Itemcheck 方法中,仅在 dontUpdate 为 false 时执行:

    public void CheckedBoxList_ItemCheck(sender object, EventArgs e) {
        if (dontUpdate) return;
        //else execute
    }
    

    现在以编程方式检查项目时,将其设置为 true:

    void nativeUpdate(){
        dontUpdate = true;
        //Do your items check
        dontUpdate = false;
    }
    

    当您需要以编程方式检查 item/S 时,请使用 nativeUpdate 方法。

    【讨论】:

      猜你喜欢
      • 2011-12-26
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多