整体形式vb.net keydown事件(vb.net Keydown event on whole

2019-08-03 13:33发布

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

Answer 1:

你应该设置的KeyPreview形式为True财产和处理keydown事件有

当此属性设置为true,窗体将接收所有按键响应,KeyDown和KEYUP事件。 之后窗体的事件处理程序处理完的按键,键击,然后分配给具有焦点的控制。 ..........仅在窗体级别处理键盘事件并不允许控件接收键盘事件,在窗体的按键事件处理的KeyPressEventArgs.Handled属性设置为true。

因此,例如,处理控制+ 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


Answer 2:

我用这个代码在我的形式和它似乎工作不错。

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


文章来源: vb.net Keydown event on whole form