显示消息框可防止 IsCheck 触发

本文关键字:IsCheck 触发 可防止 消息 显示 | 更新日期: 2023-09-27 17:55:18

我有几个绑定到单个CheckBoxTextBoxes

这是与之关联的逻辑:

  • 如果选中Checkbox,它将覆盖关联TextBoxes中的任何现有文本并使其成为"0"++
  • 如果所有TextBoxes的得分均为"0",则CheckBox应禁用并选中。
  • 如果任何TextBoxes从"0"更改,它将变为已启用和未选中。

++ *注意:* 需要注意的是,如果TextBox的值为"C"。

好的,所以我遇到的问题是,当其中一个关联的TextBoxes的值为"C"时,实现上面的警告。我希望发生的是遍历TextBoxes并检查是否有任何得分为"C"。 如果找到一个,则向用户显示一条警告消息,确认他们是否要继续。 如果选择"是",则所有相关分数都将覆盖为"0"。如果选择"否",则应取消Checked事件。

为此,我为 CheckBox.PreviewMouseDownCheckBox.Checked 事件添加了事件侦听器。 这是我的CheckBox.PreviewMouseDown事件侦听器的代码:

private void NormalCheckBoxControl_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    CheckBox normalCheckBox = (CheckBox)sender;
    bool showCorrespondingScoreWarningMsg = false;
    //Get a Row to loop through the AssociatedAdqScore controls for each
    ScoreControl tempScoreControl = new ScoreControl();
    foreach (ScoreControl score in this.ScoreControlList)
    {
        if (score.ScoreTextBox.Text == "C")
        {
            showCorrespondingScoreWarningMsg = true;
        }
    }
    if (showCorrespondingScoreWarningMsg)
    {
        MessageBoxResult msgResult = InformationBox.Show("WARNING: Proceeding will remove corresponding 'C' scores.  Continue?", "Continue?", ButtonStyle.YesNo, IconStyle.Question);
        if (msgResult == MessageBoxResult.No)
        {
            e.Handled = true;
        }
    }
}
如果用户选择"

否",这有效,但是我遇到的问题是,当选择"是"时,CheckBox.Checked事件仍然不会被触发。 我尝试手动设置CheckBox.IsChecked = true;如果if (msgResult == MessageBoxResult.Yes),但这会破坏绑定,因此这不是一个可行的解决方案。

如果用户选择"是",有什么方法可以解决此问题并继续NormalCheckBoxControl_Checked(object sender, RoutedEventArgs e)事件?

显示消息框可防止 IsCheck 触发

我不知道"已检查"事件,尽管有一个CheckedChanged事件和一个CheckStateChanged事件。我习惯了.NET 2.0,所以这可能是3.0+的东西。无论哪种方式,我想我已经在这样的实例中手动调用了事件处理程序,没有任何问题。

您可以使用空参数(或已知对象和新事件参数)手动调用事件处理程序:

NormalCheckBoxControl_Checked(null, null);

NormalCheckBoxControl_Checked(new object, new EventArgs());

这应该手动启动您的例程,除非您需要它们,否则提供虚拟参数真的没有问题。无需引发事件并等待它冒泡,只需调用例程即可。

当然,如果还有其他例程依赖于事件冒泡,或者同一事件有多个处理程序,那么它可能会给您带来问题。请注意这一点,以防万一。