2009-09-23 146 views
1

我有這樣的代碼:C#禁用TAB鍵

 
this.searchInput.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.inputKeypress); 

private void Keypress(object sender, KeyPressEventArgs e) 
{ 
    // If Tab has been pressed 
    if(122 == (int)e.KeyChar) 
    { 
     switchTab(sTab); 
     MessageBox.Show(sTab); 
    } 
} 

它所做的是它設置焦點切換到其他元素。 但是,當焦點設置爲文本框,並按TAB時,它只是在文本框中生成一個選項卡,並且不會將焦點設置爲下一個元素。

任何人都知道我該怎麼做這項工作?

我試着設置e.Handled = true;但沒有工作...

+0

是否有任何理由你明確地移動焦點時,按下標籤,而不是依靠默認的機制和標籤順序? – ICR

+0

我需要將tabindex設置爲面板,我看不到任何屬性。 – Ikky

回答

4

您是否嘗試過在TextBoxfalse之間設置AcceptsTab

編輯:

是的。這是行不通的。奇怪...它仍然列表在文本框

這沒有什麼意義。我跑一個小的測試應用程序,和TAB鍵只會帶來從TextBox焦點離開時,其AcceptsTabMultiline這兩種屬性,true,不管事件處理程序被用於KeyPress定義。

您確定其他代碼沒有設置AcceptsTabtrue?如果你是,是否設置Multilinefalse根本改變標籤行爲?你能發佈更多的相關代碼嗎?

+0

是的。這是行不通的。奇怪... 它仍然列表在文本框 – Ikky

+0

啊,Multiline設置爲false。 我會把它設置爲true,並希望看到它幫助:) – Ikky

+0

它現在的作品:) 謝謝! – Ikky

3

將文本框的AcceptsTab屬性設置爲false

+0

是的。這是行不通的。奇怪... 它仍然列表中的文本框 – Ikky

0

你需要像這樣創建控件的實例,並覆蓋下列方法:

using System.Windows.Forms 

//optional namespace 

public class NoTabTextBox : TextBox 
{ 
    protected override bool IsInputKey(Keys keyData) 
    { 
     switch (keyData) 
     { 
      case Keys.Tab: 
       return true; 
     } 
     return base.IsInputKey(keyData); 
    } 

    protected override void OnKeyDown(KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Tab) { e.Handled = true; e.SuppressKeyPress = true; } 
     base.OnKeyDown(e); 
    } 
} 

生成解決方案,然後替補多你定期的TextBox用新的「NoTabTextBox」,通過在工具箱中的用戶控件下找到它。

這將捕獲Tab鍵並強制它不做任何事情。