Как перехватить заголовок TAB в приложении WinForms?

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

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

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

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

Спасибо.

Ответ 1

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

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 

Ответ 2

Это код С#, похожий на код VB, указанный выше ссылкой...

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

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

Ответ 3

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

Ответ 4

Private Sub form1_KeyDown(.... ) Handles Me.KeyDown
    If e.KeyCode = Keys.Enter Then
        SendKeys.Send("{tab}")
    End If
End Sub