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

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

编辑:

private void normalCheck_Checked(object sender, RoutedEventArgs e)
{
    normal();
}

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

【问题讨论】:

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

标签: c# wpf checkbox


【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多