2009-09-23 4 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); 
    } 
} 

Что она делает это, что он устанавливает фокус на другой элемент. Но когда фокус установлен на TextBox, и я нажимаю TAB, он просто делает вкладку в TextBox и не фокусируется на следующем элементе.

У кого-нибудь есть идея, как я могу сделать эту работу?

Я попытался установить e.Handled = true; но это не сработало ...

+0

Есть ли причина, по которой вы явно перемещаете фокус при нажатии вкладки, а не полагаетесь на механизм по умолчанию и порядок табуляции? – ICR

+0

Мне нужно установить tabindex на панель, и я не вижу никаких свойств для этого. – Ikky

ответ

4

Вы пробовали установить AcceptsTab на TextBox на false?

Edit:

да. Это не работает. Странно ... Он по-прежнему содержит таблицы в текстовом поле

Это мало смысла. Я побежал небольшой тест приложение, и клавиша табуляции приносит только фокус от TextBox когда его AcceptsTabиMultiline свойства как true, независимо от обработчика события, определяемый для KeyPress.

Вы уверены, что какой-либо другой код не устанавливает AcceptsTab в true? Если да, то устанавливает ли значение Multiline значение false вообще изменить поведение вкладки? Не могли бы вы разместить больше своего соответствующего кода?

+0

yep. Это не работает. Strange ... Он по-прежнему табулирует в текстовом поле – Ikky

+0

ah, для Multiline установлено значение false. Я установлю его на истину и надеюсь увидеть, что это помогает :) – Ikky

+0

Сейчас он работает :) Спасибо! – Ikky

3

Установить значение AcceptsTab введите текст с картинки false?

+0

yep. Это не работает. Странно ... Он все еще табулирует в текстовом поле – 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); 
    } 
} 

Построить решение, то subsitute вы регулярное TextBox с новым «NoTabTextBox», найдя его под пользовательскими элементами управления в панели инструментов.

Это захватит ключ Tab и заставит его ничего не делать.

Смежные вопросы