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

标签 c# winforms checkbox

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

我通常按以下方式进行。

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
}

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

最佳答案

我觉得你的方法很好。

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

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
}

关于c# - 以编程方式检查控件时如何防止触发 CheckedChanged 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8089072/

相关文章:

c# - ASP.NET MVC 4 ViewModel查询

c# - 在关闭表单之前提示用户提交更改

c# - 在客户端上显示服务器日期和服务器时间

c# - 复选框列表问题

c# - 启用 bool 值并在 View 中输入文本,然后传回 Controller - MVC

c# - 如何将 int NULL 插入数字数据库字段?

winforms - 为什么我的对话框在某些(但不是全部)Windows7 计算机上太小?

c# - 使用 WebClient() 计算要下载的总字节数

c# - 获取 checkedCheckList (Form1) 的 GetItemCheckState (在 Form2)

javascript - jQuery - 如果未禁用,则仅选择元素