以编程方式检查控件时如何防止触发 CheckedChanged 事件? [英] How to prevent firing CheckedChanged event when checking a control programmatically?

查看:15
本文介绍了以编程方式检查控件时如何防止触发 CheckedChanged 事件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在以编程方式检查控件时防止触发 CheckedChanged 事件?

How do I prevent firing CheckedChanged event when checking a control programmatically?

我通常按照以下方式进行.

I usually do this the following way.

private bool isFrozen = false;

private void btn1_CheckedChanged(object sender, EventArgs e)
{
    if (isFrozen) 
        return;

    isFrozen = true;
    btn2.Checked = false;
    isFrozen = false;

    // Do some stuff
}

private void btn2_CheckedChanged(object sender, EventArgs e)
{
    if (isFrozen) 
        return;

    isFrozen = true;
    btn1.Checked = false;
    isFrozen = false;

    // Do another stuff
}

有更好或更通用的解决方案吗?

Is there a better or more common solution?

推荐答案

我觉得你的方法很好.

另一种方法是在检查前删除EventHandler,然后在检查后重新添加.这种方式消除了对 isFrozen 变量的需要.

The other way to do it is remove the EventHandler before the check, and then add it back again after the check. This way eliminates the need for the isFrozen variable.

private void btn1_CheckedChanged(object sender, EventArgs e)
{
  btn2.CheckedChanged -= btn2_CheckedChanged;
  btn2.Checked = false;
  btn2.CheckedChanged += btn2_CheckedChanged;

    // Do some staff
}

private void btn2_CheckedChanged(object sender, EventArgs e)
{
  btn1.CheckedChanged -= btn1_CheckedChanged;
  btn1.Checked = false;
  btn1.CheckedChanged += btn1_CheckedChanged;

    // Do another staff
}

这篇关于以编程方式检查控件时如何防止触发 CheckedChanged 事件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆