How to intercept capture TAB key in WinForms application?

倾然丶 夕夏残阳落幕 提交于 2019-12-19 13:43:48

问题


I'm trying to capture the Tab key in a Windows Forms application and do a custom action when it is pressed.

I have a Form with several listViews and buttons, I've set the Form's KeyPreview property to true and when I press any other key than tab, my KeyDown event handler does get called.

But that's not true with the Tab key - I don't receive WM_KEYDOWN message even in WndProc.

Do I need to set each control inside my form - its TabStop property - to false? There must be a more elegant way than that.

Thanks.


回答1:


will this help you?

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:


This is the C# code similar to the VB code given in the answer above...

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

Hope this helps...




回答3:


You can use "PreviewKeyDown" Event




回答4:


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


来源:https://stackoverflow.com/questions/2461512/how-to-intercept-capture-tab-key-in-winforms-application

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!