我有一个复选框,并且我已订阅 CheckedChanged 事件。处理程序在那里执行一些操作。我以编程方式选中和取消选中该复选框(例如:chkbx_Name.Checked = true
),并且 CheckedChanged 事件被触发。
我希望仅当我手动选中或取消选中此事件时才会触发该事件。当我以编程方式检查/取消选中它时,有什么方法可以避免触发此事件?
在设置之前取消订阅事件:
check1.CheckChanged -= check1_CheckChanged;
那么您可以以编程方式设置该值,而无需复选框触发其 CheckChanged 事件:
check1.Checked = true;
然后重新订阅:
check1.CheckChanged += check1_CheckChanged;
[编辑:2012 年 3 月 29 日]
Tanvi 方法的问题是你需要捕获所有来源手动勾选或取消勾选。并不是说有太多(仅来自鼠标单击和用户按空格键),但您必须考虑从 MouseClick 和 KeyUp 调用重构事件(检测空格键)
对于 CheckBox(与此相关的任何控件)来说,不知道用户输入的来源(键盘、鼠标等)会更简洁,因此为此我将只使 CheckBox 的编程设置真正成为编程的。例如,您可以将属性的编程设置包装到扩展方法:
static class Helper
{
public static void SetCheckProgrammatically(
this CheckBox c,
EventHandler subscribedEvent, bool b)
{
c.CheckedChanged -= subscribedEvent; // unsubscribe
c.Checked = b;
c.CheckedChanged += subscribedEvent; // subscribe
}
}
使用这种方法,您的代码可以仅通过一个事件(即通过 CheckChanged)巧妙地响应用户的鼠标输入和键盘输入。没有重复的代码,不需要订阅多个事件(例如键盘,通过按空格键选中/取消选中复选框)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)