2012-12-05 10 views
10

Ho un modulo con diversi controlli. Voglio eseguire un sub specifico su evento keydown indipendentemente da qualsiasi evento di controllo. Voglio dire se l'utente preme Ctrl + S ovunque sul modulo esegue una subroutine.evento di keydown vb.net su intero modulo

risposta

17

È necessario impostare la proprietà KeyPreview sul modulo su True e gestire l'evento keydown ci

Quando questa proprietà è impostata su true, la forma riceverà tutte KeyPress, KeyDown , e gli eventi KeyUp. Dopo che gli handler di evento del modulo hanno completato l'elaborazione del tasto , il tasto viene assegnato a il controllo con lo stato attivo. .......... Per gestire gli eventi della tastiera solo a livello di modulo e non consentire ai comandi di ricevere eventi di tastiera , impostare la proprietà KeyPressEventArgs.Handled nel gestore di eventi KeyPress del modulo su true.

Così, ad esempio, per gestire la combinazione di tasti Control + S è possibile scrivere questo gestore di eventi per l'evento KeyDown del modulo.

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

Grazie Steve ... è molto utile – Malik

1

Ho usato questo codice nelle mie forme prima e sembra funzionare piuttosto bene.

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 
Problemi correlati