当焦点在TextBox中时,如何覆盖窗体上的默认按钮

本文关键字:覆盖 窗体 默认按钮 何覆盖 焦点 TextBox 中时 | 更新日期: 2023-09-27 18:29:01

我有一个winform表单,它有典型的OK和Cancel按钮。

"确定"按钮设置为默认按钮。当用户按下ENTER键时,表单将关闭。

表单还有一个文本框,旁边有一个"搜索"按钮。该文本框允许用户输入搜索文本,"搜索"键启动搜索功能。

我希望用户能够在文本框具有输入焦点并激活搜索功能时按下ENTER键。

问题是表单在文本框的处理程序获取ENTER键事件之前就获取了它

编辑:我尝试过使用以下事件处理程序,但它们从未被击中,并且当按下Enter键时表单关闭:

    private void txtFilter_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            Search();
            e.Handled = true;           
        }
    }
    private void txtFilter_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            Search();
            e.Handled = true;
        }
    }

我还尝试在窗体上启用KeyPreview属性,并为窗体实现KeyDown事件处理程序,但Enter键似乎从未导致任何一个事件被命中。

实现这一目标的最佳方法是什么?

当焦点在TextBox中时,如何覆盖窗体上的默认按钮

尝试处理TextBox的EnterLeave事件以清除表单的AcceptButton属性:

private void txtFilter_Enter(object sender, EventArgs e) {
  this.AcceptButton = null;
}
private void txtFilter_Leave(object sender, EventArgs e) {
  this.AcceptButton = closeButton;
}

然后,您可以根据需要处理KeyUp事件:

private void txtFilter_KeyUp(object sender, KeyEventArgs e)
{
  if (e.KeyCode == Keys.Enter)
  {
    Search();         
  }
}

将KeyDown事件处理程序添加到textBox,然后将其添加到

        if (e.KeyCode == Keys.Enter)
        {
            btnSearch.PerformClick();
        }