Überprüfen der Tastendruckaktion für Zusatztasten (Windows Forms .NET)

Wenn der Benutzer Tasten in Ihrer Anwendung drückt, können Sie gedrückte Zusatztasten wie SHIFT, ALT und STRG überwachen. Wenn eine Zusatztaste in Kombination mit anderen Tasten oder sogar einem Mausklick gedrückt wird, kann die Anwendung entsprechend reagieren. Wenn Sie beispielsweise die Taste S drücken, wird möglicherweise ein „s“ auf dem Bildschirm angezeigt. Wenn die Tasten STRG+S gedrückt werden, kann das aktuelle Dokument gespeichert werden.

Wichtig

Der Desktopleitfaden zu .NET 7 und .NET 6 ist in Bearbeitung.

Wenn Sie das KeyDown-Ereignis verarbeiten, gibt die vom Ereignishandler empfangene KeyEventArgs.Modifiers-Eigenschaft an, welche Zusatztasten gedrückt werden. Außerdem gibt die KeyEventArgs.KeyData-Eigenschaft das Zeichen an, das zusammen mit allen beliebigen Zusatztasten in Kombination mit einem bitweisen OR gedrückt wurde.

Wenn Sie das KeyPress-Ereignis oder ein Mausereignis verarbeiten, empfängt der Ereignishandler diese Informationen nicht. Verwenden Sie die ModifierKeys-Eigenschaft der Control-Klasse, um einen Tastenmodifizierer zu erkennen. In beiden Fällen müssen Sie ein bitweises AND für den entsprechenden Keys-Wert und den getesteten Wert ausführen. Die Keys-Enumeration bietet Variationen der einzelnen Zusatztasten, weshalb es wichtig ist, dass Sie den bitweisen AND-Vorgang mit dem korrekten Wert durchführen.

Die SHIFT-TASTE wird beispielsweise durch die folgenden Tastenwerte dargestellt:

Der korrekte Wert zum Testen von SHIFT als Zusatztaste ist Keys.Shift. Wenn Sie STRG und ALT als Modifizierer testen, sollten Sie auf die gleiche Weise die Werte Keys.Control bzw. Keys.Alt verwenden.

Erkennen von Zusatztasten

Sie können ermitteln, ob eine Zusatztaste gedrückt wird, indem Sie die ModifierKeys-Eigenschaft und den Keys-Enumerationswert mit einem bitweisen AND-Operator vergleichen.

Im folgenden Codebeispiel wird veranschaulicht, wie bestimmt wird, ob die SHIFT-TASTE in den Ereignishandlern KeyPress und KeyDown gedrückt wird.

// 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

Siehe auch