Как перехватить ввод ключа TAB в приложении WinForms? - PullRequest
11 голосов
/ 17 марта 2010

Я пытаюсь перехватить клавишу Tab в приложении Windows Forms и выполнить пользовательское действие при ее нажатии.

У меня есть форма с несколькими listViews и кнопками, я установил для свойства KeyPreview формы значение true, и когда я нажимаю любую другую клавишу, кроме tab, вызывается мой обработчик событий KeyDown.

Но это не так с клавишей Tab - я не получаю сообщение WM_KEYDOWN даже в WndProc.

Нужно ли устанавливать для каждого элемента управления внутри формы - его свойство TabStop - значение false? Должен быть более элегантный способ, чем этот.

Спасибо.

Ответы [ 4 ]

30 голосов
/ 17 марта 2010

Это код C #, аналогичный коду VB, приведенному в ответе выше ...

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == Keys.Tab)
        {
            //your code
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }

Надеюсь, это поможет ...

9 голосов
/ 17 марта 2010

будет это поможет вам?

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
  Dim keyPressed As Keys = CType(msg.WParam.ToInt32(), Keys)

  Select Case keyPressed
    Case Keys.Right msgbox("Right Arrow Key Caught")
    Case Keys.Left msgbox("LeftArrow Key Caught")
    Case Keys.Up msgbox("Up Arrow Key Caught")
    Case Keys.Down msgbox("Down Arrow Key Caught")
    Case Else Return MyBase.ProcessCmdKey(msg, keyData)
  End Select
End Function 
7 голосов
/ 22 мая 2012

Вы можете использовать событие «PreviewKeyDown»

0 голосов
/ 28 ноября 2013
Private Sub form1_KeyDown(.... ) Handles Me.KeyDown
    If e.KeyCode = Keys.Enter Then
        SendKeys.Send("{tab}")
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...