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

2024-02-11

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

这并不是说处理程序中的代码已损坏。这可以通过以下事实来确定:单击按钮时永远不会到达处理程序第一行上的断点。

其他事件正在运行(我正在使用CheckedChanged此表单上的事件及其行为)。

我的团队成员已经检查过了,也没有发现问题。

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

设计者生成的代码

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);
    }
}

My Code

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");
    }
}

编辑:测试中的附加信息

我的表单中有几个数据绑定下拉列表。我发现只有当我首先在下拉框中进行选择时,单击事件才会触发。

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


原因如下:

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

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

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

如果你处理同样的问题也会发生Validating类似控件的事件TextBox并设置e.cancel = true.

这是修复方法:

您可以使用以下任一选项修复此行为:

  • Set 你的按钮的属性false
  • Set 您的表单的属性AutoValidate.EnableAllowFocusChange
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单击事件未触发 - 无法更改焦点 - 无法关闭表单 的相关文章

随机推荐