2010-09-20 102 views
2

正常情況下,按Tab鍵時,按給定Tab鍵順序將焦點更改爲下一個控件。我想阻止它,並讓TAB鍵做其他事情。就我而言,我希望將焦點從一個組合框更改爲一個完全不同的控件。我無法通過設置標籤順序來做到這一點。我需要以編程方式進行此操作。任何想法如何?看起來KeyDown和KeyPress事件不能正確處理TAB鍵。 謝謝。如何攔截TAB鍵以防止C#中的標準焦點更改

回答

4

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

0

您可以嘗試在你的KeyDown事件驗證碼:

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

如果點擊該按鈕選項卡,然後做任何您想要的定製邏輯,然後致電SuppressKeyPress停止KeyPress事件觸發併爲您調用正常的Tab邏輯。

+0

e.SuppressKeyPress = true; – 2013-09-20 04:36:46

+0

至少對於Telerik控件來說,當按下Tab時不會觸發KeyDown事件。 – 2017-03-26 00:39:52

3

基於使用PreviewKeyDown事件的JRS的建議,該發送按鍵通過對控制:

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(即, TextBoxRichTextBox),其中Multiline屬性設置爲true,那麼您可以簡單地將AcceptsTab屬性設置爲true

TextBoxBase.AcceptsTab Property

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

+0

我正在給示例添加'e.SuppressKeyPress = true;',但奇怪的是'MessageBox'似乎阻止它工作(這是一個完全獨立的問題)。 – Zantier 2014-05-07 12:47:51