vb.net Keydown event on whole form

前端 未结 2 2161
耶瑟儿~
耶瑟儿~ 2020-12-09 11:34

I have a form with several controls. I want to run a specific sub on keydown event regardless any controls event. I mean if user press Ctrl+S anywhere on form it execute a s

相关标签:
2条回答
  • 2020-12-09 12:16

    You should set the KeyPreview property on the form to True and handle the keydown event there

    When this property is set to true, the form will receive all KeyPress, KeyDown, and KeyUp events. After the form's event handlers have completed processing the keystroke, the keystroke is then assigned to the control with focus. .......... To handle keyboard events only at the form level and not allow controls to receive keyboard events, set the KeyPressEventArgs.Handled property in your form's KeyPress event handler to true.

    So, for example, to handle the Control+S key combination you could write this event handler for the form KeyDown event.

    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
    
    0 讨论(0)
  • 2020-12-09 12:19

    I've used this code in my forms before and it seems to work pretty good.

    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
    
    0 讨论(0)
提交回复
热议问题