如何在不引发事件的情况下设置 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 滚动