vb.net Keydown event on whole form

Malik picture Malik · Dec 5, 2012 · Viewed 34.8k times · Source

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 subroutine.

Answer

Steve picture Steve · Dec 5, 2012

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