我正在尝试在 Windows 窗体应用程序中捕获Tab键,并在按下它时执行自定义操作。
我有一个带有多个 listView 和按钮的表单,我已将表单的KeyPreview属性设置为 true,并且当我按下选项卡以外的任何其他键时,我的 KeyDown 事件处理程序确实会被调用。
但是Tab键不是这样——即使在 WndProc 中,我也没有收到 WM_KEYDOWN 消息。
我是否需要将表单中的每个控件(其TabStop属性)设置为 false?一定有比这更优雅的方式。
谢谢。
这是类似于上面答案中给出的 VB 代码的 C# 代码...
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Tab)
{
//your code
}
return base.ProcessCmdKey(ref msg, keyData);
}
希望这可以帮助...
这会帮助你吗?
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
您可以使用“PreviewKeyDown”事件
Private Sub form1_KeyDown(.... ) Handles Me.KeyDown
If e.KeyCode = Keys.Enter Then
SendKeys.Send("{tab}")
End If
End Sub