如何在不引发事件的情况下设置 checkbox.isChecked

Posted

技术标签:

【中文标题】如何在不引发事件的情况下设置 checkbox.isChecked【英文标题】:How to set checkbox.isChecked without raising event 【发布时间】:2013-05-11 19:07:09 【问题描述】:

有没有办法检查CheckBox 而无需运行与检查相关的代码?只是为了视觉外观。

编辑:

private void normalCheck_Checked(object sender, RoutedEventArgs e)

    normal();

想象一下,我想设置 normalCheckBox.IsChecked=true; 但不引发事件。这可能吗?

【问题讨论】:

他想以编程方式设置复选框的“Checked”属性而不引发 Checked 事件,即使他已订阅 Checked 事件。 哇@MatthewWatson 你是个读心者;) 【参考方案1】:

对于未检查事件:(基于@keyboardP的解决方案)

myCheckbox.Unchecked -= myCheckbox_Unchecked;
myCheckbox.IsChecked = false;
myCheckbox.Unchecked += myCheckbox_Unchecked;

【讨论】:

这个答案有什么新的吗? 也许它为你提供了新的东西【参考方案2】:

您可以使用Click 事件而不是Checked 并使用复选框的状态,如下所示:

private void normalCheck_Click(object sender, RoutedEventArgs e)

    if (normalCheck.IsChecked ?? false)  normal(); 

那么,使用normalCheck.IsChecked = true; 将不会引发此事件。它只会通过点击来提升。

注意:空合并运算符 (??) 是必需的,因为 IsChecked 返回一个可能为空的 bool? 类型。

【讨论】:

【参考方案3】:

一种方法是分离事件处理程序,设置IsChecked 属性,然后重新附加它。

myCheckbox.Checked -= myCheckbox_Checked;
myCheckbox.IsChecked = true;
myCheckbox.Checked += myCheckbox_Checked;

【讨论】:

减号和加号是什么?我不明白。看起来很有趣。 @iMohammad - - 会将事件处理程序与 myCheckbox 控件分离。因此,在Checked 事件之后通常会触发的任何代码都不会被调用(因为您已经删除了事件处理程序)。 + 只是简单地附加事件处理程序,这样,从现在开始,如果触发了 Checked 事件,那么事件处理程序代码也会被调用。 我相信您可以将其缩写为myCheckbox.Checked -= myCheckbox_Checked;(其他类似)。 我必须在左侧对 "-=" 和 "+=" 行进行修改:myCheckbox.CheckChanged -= myCheckbox_Changed; (CheckChanged 而不是 Checked) @iluomo - 澄清一下,Checked 用于 WPF 框架。我假设您使用的是 WinForms,这就是您需要使用 CheckChanged 的原因【参考方案4】:

如果您指的是在不引发“_Checked”事件的情况下更改选中状态,则可能必须使用参数覆盖事件处理程序以告知它是否跳过该事件。

相关回答:Change Checkbox value without raising event

【讨论】:

以上是关于如何在不引发事件的情况下设置 checkbox.isChecked的主要内容,如果未能解决你的问题,请参考以下文章

如何在不丢失触摸事件的情况下冻结 UIScrollView 滚动

在 iPad 上,如何在不显示选项的情况下通过 Javascript 事件在选择元素上设置 focus()?

如何在不消耗事件的情况下监听事件

如何在不引发错误的情况下检查模块的存在?

如何在不引发错误的情况下更新数据库中的不喜欢投票?

在不触发事件的情况下设置虚拟键/鼠标按钮状态