簡體   English   中英

當焦點位於TextBox中時,如何覆蓋表單上的默認按鈕

[英]How can I override the default button on a form when focus is in a TextBox

我有一個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的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();
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM