繁体   English   中英

整个表单上的vb.net Keydown事件

[英]vb.net Keydown event on whole form

我有一个带有几个控件的表单。 我想在keydown事件上运行一个特定的sub,无论任何控件事件。 我的意思是如果用户在表格的任何地方按Ctrl + S它会执行子程序。

您应该将窗体上的KeyPreview属性设置为True并在那里处理keydown事件

当此属性设置为true时,表单将接收所有KeyPress,KeyDown和KeyUp事件。 在表单的事件处理程序完成键击处理之后,然后将键击分配给具有焦点的控件。 ..........要仅在表单级别处理键盘事件而不允许控件接收键盘事件,请将表单的KeyPress事件处理程序中的KeyPressEventArgs.Handled属性设置为true。

因此,例如,要处理Control + S组合键,您可以为表单KeyDown事件编写此事件处理程序。

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles MyBase.KeyDown
    If  e.Control AndAlso e.KeyCode = Keys.S then
        ' Call your sub method here  .....
        YourSubToCall()

        ' then prevent the key to reach the current control
        e.Handled = False 
    End If
End Sub

我以前在我的表单中使用过此代码,似乎工作得很好。

Protected Overrides Function ProcessKeyPreview(ByRef m As System.Windows.Forms.Message) As Boolean
    If m.Msg = &H100 Then  'WM_KEYDOWN
        Dim key As Keys = m.WParam
        If key = Keys.S And My.Computer.Keyboard.CtrlKeyDown Then 
             'DO stuff
             Return True
        End If
    End If

    Return MyBase.ProcessKeyPreview(m)
 End Function

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM