Как перехватить нажатие клавиши TAB для предотвращения стандартного изменения фокуса в C # - PullRequest
2 голосов
/ 20 сентября 2010

Обычно, нажимая клавишу TAB, вы переключаете фокус на следующий элемент управления в заданном порядке табуляции. Я хотел бы предотвратить это и заставить клавишу TAB делать что-то еще. В моем случае я хотел бы изменить фокус с комбинированного списка на совершенно другой элемент управления. Я не могу сделать это, установив порядок вкладок. Мне нужно сделать это программно. Есть идеи как? Похоже, что события KeyDown и KeyPress не могут правильно обрабатывать клавишу TAB. Спасибо.

Ответы [ 5 ]

5 голосов
/ 20 сентября 2010

Переопределите ProcessDialogKey или ProcessTabKey в вашей Форме и выполняйте необходимую логику в зависимости от того, какой элемент управления сфокусирован.

3 голосов
/ 07 мая 2014

Основываясь на предложении 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 (то есть TextBox или RichTextBox), со свойством Multiline, установленным в true,тогда вы можете просто установить для свойства AcceptsTab значение true.

TextBoxBase.AcceptsTab Property

Получает или задает значение, указывающее, нажимается ли клавиша TABпри вводе многострочного текстового поля введите символ TAB в элемент управления вместо перемещения фокуса на следующий элемент управления в порядке табуляции.

0 голосов
/ 14 июня 2011

Так как я создаю UserControl, я использовал событие PreviewKeyDown в элементе управления.Это избавляет от необходимости обрабатывать события нажатия клавиш в форме хоста.

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

0 голосов
/ 20 сентября 2010

Вы можете попробовать этот код на вашем KeyDown мероприятии:

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

Если нажата кнопка «Tab», тогда сделайте любую нужную вам логику, затем вызовите SuppressKeyPress, чтобы остановить запуск события KeyPress и вызвать для вас обычную логику Tab.

0 голосов
/ 20 сентября 2010

Переопределить событие элемента управления LostFocus, см. Ссылку ниже для примеров:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...