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

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

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

但是Tab键不是这样 – 即使在WndProc中我也没有收到WM_KEYDOWN消息。

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

谢谢。

这对你有帮助吗?

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 

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

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

希望这可以帮助…

您可以使用“PreviewKeyDown”事件

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