簡體   English   中英

如何截取TAB鍵按鍵以防止C#中的標准焦點更改

[英]How to intercept the TAB key press to prevent standard focus change in C#

通常,在按TAB鍵時,您可以將焦點更改為給定Tab鍵順序中的下一個控件。 我想阻止它並讓TAB鍵做其他事情。 在我的情況下,我想將焦點從組合框改為完全不同的控制。 我不能通過設置Tab鍵順序來完成此操作。 我需要以編程方式執行此操作。 知道怎么樣? 似乎KeyDown和KeyPress事件無法正確處理TAB鍵。 謝謝。

覆蓋表單上的ProcessDialogKeyProcessTabKey ,並根據所關注的控件執行所需的邏輯。

根據JRS建議使用PreviewKeyDown事件,這會將按鍵發送到控件:

private void textBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    if (e.KeyCode == Keys.Tab)
        e.IsInputKey = true;
}

然后,如果要自定義行為,則可以處理控件的KeyDown事件:

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Tab)
    {
        MessageBox.Show("The tab key was pressed while holding these modifier keys: "
                + e.Modifiers.ToString());
    }
}

TextBoxBase替代方案

如果控件是從TextBoxBase (即TextBoxRichTextBox )派生的,並且Multiline屬性設置為true ,那么您只需將AcceptsTab屬性設置為true

TextBoxBase.AcceptsTab屬性

獲取或設置一個值,該值指示在多行文本框控件中按TAB鍵是否在控件中鍵入TAB字符,而不是將焦點移動到Tab鍵順序中的下一個控件。

覆蓋控件的LostFocus事件,請參閱下面的鏈接以獲取示例:

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.lostfocus.aspx

您可以在KeyDown事件上嘗試此代碼:

if (e.KeyCode == Keys.Tab) {
  //your logic
  e.SuppressKeyPress = true;
}

如果單擊按鈕是Tab,則執行所需的任何自定義邏輯,然后調用SuppressKeyPress以停止觸發KeyPress事件並為您調用正常的Tab邏輯。

由於我正在構建UserControl,我最終在控件上使用了PreviewKeyDown事件。 這避免了必須處理主機表單上的按鍵事件。

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.previewkeydown.aspx

暫無
暫無

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

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