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ż
.NET Desktop feedback
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla