单击事件不触发 - 无法更改焦点 - 无法关闭表单

Jam*_*ler 6 .net c# data-binding winforms

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

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

其他事件正在发挥作用(我正在使用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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的守则

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:测试的其他信息

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

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

Rez*_*aei 8

原因如下:

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

当窗体的子控件未验证时,默认情况下您无法从无效控件更改焦点.

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

如果您处理Validating类似TextBox和设置的控件事件,则会发生同样的问题e.cancel = true.

这是修复:

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

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