Sprawdzanie pod kątem naciśnięcia klawiszy modyfikatora (Windows Forms .NET)

Gdy użytkownik wpisuje klucze do aplikacji, można monitorować pod kątem klawiszy modyfikatora naciśniętych, takich jak SHIFT, ALT i CTRL. Po naciśnięciu klawisza modyfikatora w połączeniu z innymi klawiszami, a nawet kliknięciem myszy, aplikacja może odpowiednio odpowiedzieć. Na przykład naciśnięcie klawisza S może spowodować wyświetlenie "s" na ekranie. Jeśli klawisze CTRL+S są naciskane, zamiast tego można zapisać bieżący dokument.

Ważne

Dokumentacja przewodnika dla komputerów dla platform .NET 7 i .NET 6 jest w budowie.

Jeśli obsłużysz KeyDown zdarzenie, właściwość odebrana przez program obsługi zdarzeń określa, KeyEventArgs.Modifiers które klawisze modyfikujące są naciskane. Ponadto właściwość określa znak, KeyEventArgs.KeyData który został naciśnięty wraz z dowolnymi klawiszami modyfikatora w połączeniu z bitowym OR.

Jeśli obsługujesz KeyPress zdarzenie lub zdarzenie myszy, program obsługi zdarzeń nie otrzymuje tych informacji. ModifierKeys Użyj właściwości Control klasy, aby wykryć modyfikator klucza. W obu przypadkach należy wykonać bitową wartość AND odpowiedniej Keys wartości i testowane wartości. Wyliczenie Keys oferuje odmiany każdego klucza modyfikatora, dlatego ważne jest, aby wykonać bitowe czynności i sprawdzić poprawną wartość.

Na przykład klucz SHIFT jest reprezentowany przez następujące wartości klucza:

Poprawną wartością do przetestowania klawisza SHIFT jako modyfikatora jest Keys.Shift. Podobnie, aby przetestować klawisze CTRL i ALT jako modyfikatory, należy użyć Keys.Control odpowiednio wartości i Keys.Alt .

Wykrywanie klucza modyfikatora

Wykryj, czy klawisz modyfikatora jest naciskany przez porównanie ModifierKeys właściwości i Keys wartości wyliczenia z bitowym operatorem AND.

Poniższy przykład kodu pokazuje, jak określić, czy klawisz SHIFT jest naciskany w programach KeyPress obsługi zdarzeń i KeyDown .

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

Zobacz też