如何在WinForms应用程序中拦截捕获TAB键?

时间:2010-03-17 10:39:20

标签: c# .net winforms keystroke

我正在尝试捕获Windows窗体应用程序中的 Tab 键,并在按下时执行自定义操作。

我有一个包含多个listViews和按钮的Form,我已将Form的 KeyPreview 属性设置为true,当我按Tab键之外的任何其他键时,我的KeyDown事件处理程序会被调用。

Tab 键并不是这样 - 即使在WndProc中我也不会收到WM_KEYDOWN消息。

我是否需要将我的表单中的每个控件 - 其 TabStop 属性 - 设置为false?必须有一种比这更优雅的方式。

感谢。

4 个答案:

答案 0 :(得分:30)

这是与上面答案中给出的VB代码类似的C#代码......

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

希望这会有所帮助......

答案 1 :(得分:9)

this会帮助你吗?

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 :(得分:7)

您可以使用“PreviewKeyDown”事件

答案 3 :(得分:-1)

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