Winform Checkbox MouseDown事件处理程序不允许触发CheckedChanged事件

时间:2015-05-18 04:40:02

标签: c# winforms checkbox mousedown

我有一个WinForm,它包含多个相互依赖的控件,用于它们的可见性和内容。 我有一对单选按钮,控制组合框(ComboBoxA)启用/禁用标志和内容。此组合框的选择控制复选框的可见性。选中此复选框可控制另一个组合框(ComboBoxB)的可见性和内容。围绕这些控制的业务要求非常复杂。因此,我需要能够以编程方式和用户操作触发事件,并在每种情况下执行不同的操作。

在复选框的情况下,我在加载数据时(如果需要)以编程方式检查它,这会触发CheckedChanged事件,后者又会执行控制ComboBoxB的其他操作。这个代码很香草,没什么特别的,但我的问题更具理论性而非实际性。请继续阅读。

由于这个要求,我需要一种方法来区分程序检查和用户操作。我尝试使用Click事件和CheckedChanged事件,在click事件中设置一个标志,表示用户操作。不幸的是,CheckedChanged事件在Click事件之前触发,结束了这个技巧。

现在,我尝试使用MouseDown事件来捕获用户操作。但有趣的是,一旦事件触发,复选框仍未选中,CheckedChanged事件不会触发。

现在,我已经设法在代码中使用一个标志来确定程序化检查并使用它来区分这两者,但我很好奇为什么MouseDown事件不允许选中复选框。有任何想法吗?我在网上搜索,但要么我没有彻底完成它,或谷歌没有为我返回正确的结果。如果有人真的能找到这个问题的谷歌搜索结果,我很抱歉。

1 个答案:

答案 0 :(得分:0)

您的代码中还有其他内容,而不是阻止MouseDown被解雇的CheckChanged事件。
我就是这样知道的:
我已在空白表单中添加了一个复选框和一个按钮,并在按钮上添加了事件处理程序,并在复选框Click上添加了CheckedChangedKeyDown个事件。我还在表单中添加了一个名为MouseDown的字符串变量,在CheckedChanged中我只显示了LastEventRaised

MessageBox

每次弹出消息框我都会收到正确的消息。