Comment rechercher les touches de modification (Windows Forms .NET)

À mesure que l’utilisateur tape les touches dans votre application, vous pouvez surveiller les touches de modificateur enfoncées telles que maj, alt et ctrl. Lorsqu’une touche de modificateur est enfoncée en combinaison avec d’autres touches ou même un clic de souris, votre application peut répondre de manière appropriée. Par exemple, l’appui sur la touche S peut entraîner l’affichage d’un « s » à l’écran. Si les touches Ctrl+S sont enfoncées, le document actif peut être enregistré.

Si vous gérez l’événement KeyDown , la KeyEventArgs.Modifiers propriété reçue par le gestionnaire d’événements spécifie les touches de modification qui sont enfoncées. En outre, la KeyEventArgs.KeyData propriété spécifie le caractère qui a été appuyé avec toutes les touches de modificateur combinées à un OR au niveau du bit.

Si vous gérez l’événement KeyPress ou un événement de souris, le gestionnaire d’événements ne reçoit pas ces informations. Utilisez la ModifierKeys propriété de la Control classe pour détecter un modificateur de clé. Dans les deux cas, vous devez effectuer un bit AND de la valeur appropriée Keys et la valeur que vous testez. L’énumération Keys offre des variantes de chaque touche de modificateur. Il est donc important que vous effectuez la vérification AND au niveau du bit avec la valeur correcte.

Par exemple, la clé MAJ est représentée par les valeurs de clé suivantes :

La valeur correcte pour tester MAJ en tant que clé de modificateur est Keys.Shift. De même, pour tester ctrl et alt en tant que modificateurs, vous devez utiliser respectivement les valeurs et Keys.Alt les Keys.Control valeurs.

Détecter la touche de modificateur

Détectez si une touche de modificateur est enfoncée en comparant la ModifierKeys propriété et la Keys valeur d’énumération à un opérateur AND au niveau du bit.

L’exemple de code suivant montre comment déterminer si la touche Maj est enfoncée dans les gestionnaires d’événements et KeyDown les KeyPress gestionnaires d’événements.

// Event only raised when non-modifier key is pressed
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
        MessageBox.Show("KeyPress " + Keys.Shift);
}

// Event raised as soon as shift is pressed
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
        MessageBox.Show("KeyDown " + Keys.Shift);
}
' Event only raised when non-modifier key is pressed
Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs)
    If ((Control.ModifierKeys And Keys.Shift) = Keys.Shift) Then
        MessageBox.Show("KeyPress " & [Enum].GetName(GetType(Keys), Keys.Shift))
    End If
End Sub

' Event raised as soon as shift is pressed
Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs)
    If ((Control.ModifierKeys And Keys.Shift) = Keys.Shift) Then
        MessageBox.Show("KeyPress " & [Enum].GetName(GetType(Keys), Keys.Shift))
    End If
End Sub

Voir aussi