首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当焦点位于TextBox中时,如何重写窗体上的默认按钮

问当焦点位于TextBox中时,如何重写窗体上的默认按钮
EN

Stack Overflow用户
提问于 2012-03-27 05:47:40
回答 2查看 868关注 0票数 1

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

OK按钮被设置为默认按钮。当用户按ENTER键时,窗体将关闭。

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

我希望用户能够按回车键时,文本框有输入焦点,并有搜索功能激活。

问题是窗体在文本框的处理程序获取回车键事件之前就抓住了它。

编辑:我尝试过使用以下事件处理程序,但它们从未命中,当按回车键时,窗体将关闭:

代码语言:javascript
复制
    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键似乎从未导致任何这些事件被击中。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-27 06:19:32

尝试处理TextBox的Enter和Leave事件以清除窗体的AcceptButton属性:

代码语言:javascript
复制
private void txtFilter_Enter(object sender, EventArgs e) {
  this.AcceptButton = null;
}

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

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

代码语言:javascript
复制
private void txtFilter_KeyUp(object sender, KeyEventArgs e)
{
  if (e.KeyCode == Keys.Enter)
  {
    Search();         
  }
}
票数 4
EN

Stack Overflow用户

发布于 2012-03-27 05:57:11

向textBox添加一个KeyDown事件处理程序,然后将以下内容添加到其中

代码语言:javascript
复制
        if (e.KeyCode == Keys.Enter)
        {
            btnSearch.PerformClick();
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9880361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档