Winforms单击“事件未触发”

我有一个winforms应用程序。 我在这个应用程序中有几个表单(主表单和几个专门的表单),并且在一个表单上,单击事件不会触发我的任何按钮。

并不是处理程序中的代码被破坏了。 这可以通过单击按钮时永远不会到达处理程序第一行的断点来确定。

其他事件正在发挥作用(我正在使用此表单上的CheckedChanged事件并且它们正在运行)。

我的团队成员已经审核过,也无法发现问题。

这是我的代码的简化视图:

Designer生成代码

partial class MyForm { private System.Windows.Forms.Button addButton; private void InitalizeComponent() { this.addButton = new System.Windows.Forms.Button(); this.addButton.Name = "addButton"; // Drawing statements here this.addButton.Click += new System.EventHandler(this.addButton_Click); this.Controls.Add(this.addButton); } } 

我的代码

 public partial class MyForm : Form { public MyForm() { InitializeComponent(); } private void addButton_Click(object sender, EventArgs e) { MessageBox.Show("The debugger is not reaching a break point on this line"); } } 

编辑:测试的其他信息

我的表单中有几个下拉列表。 我发现如果我先在下拉框中进行选择,则只能触发click事件。

如果我没有选择,按钮处理程序中的断点将触发。 否则它没有。 这些下拉列表中没有注册任何事件。

原因如下:

使用数据绑定时,当您在数据绑定控件中输入值时,它首先尝试validation条目,然后如果条目有效,数据绑定将把值放在数据源中,但如果validation错误发生,validation返回false并且你的控制进入无效模式。

当表单的子控件未validation时,默认情况下您无法从无效控件更改焦点。

默认情况下,单击某个按钮会导致失去焦点的控件的validation,因此您无法单击按钮,因为您看到按钮反映到鼠标但实际上没有单击。

如果您处理像TextBox这样的TextBox Validating事件并设置e.cancel = true则会发生同样的问题。

这是修复:

您可以使用以下任一选项修复此问题:

  • 将按钮的CausesValidation属性设置为false
  • AutoValidate属性设置为AutoValidate.EnableAllowFocusChange

我在进一步测试后发现了这个问题。

我的问题不在于按钮事件,而是在从下拉框中进行选择后表单被阻止。

我还没有发现为什么选择下拉后的表单块(它没有事件,但确实有数据绑定,所以有一些可能的原因)。

谢谢你的帮助!

这将为你做到这一点

更改

 public ScheduleMeeting() { InitializeComponent(); } 

 public MyForm() { InitializeComponent(); }