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

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

Jeśli obsłużysz KeyDown zdarzenie, właściwość odebrana przez program obsługi zdarzeń określa, KeyEventArgs.Modifiers które modyfikujące są naciskane. Ponadto właściwość określa znak, KeyEventArgs.KeyData który został naciśnięty wraz z dowolnymi 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 SHIFT jako modyfikatora jest Keys.Shift. Podobnie, aby przetestować CTRL i ALT jako modyfikatory, należy użyć Keys.Control odpowiednio wartości i Keys.Alt .

Wykrywanie klucza modyfikatora

Wykryj, czy 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 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ż