Udostępnij za pośrednictwem


Jak określić, który modyfikator został naciśnięty

Podczas tworzenia aplikacji, która akceptuje naciśnięcia klawiszy użytkownika, możesz również monitorować klawisze modyfikujące, takie jak SHIFT, ALT i CTRL. Po naciśnięciu klawisza modyfikującego w połączeniu z innymi klawiszami lub z kliknięciami myszy, aplikacja może odpowiednio zareagować. Na przykład, jeśli litera S jest naciśnięta, może to po prostu spowodować pojawienie się "s" na ekranie, ale jeśli klawisze CTRL+S są naciśnięte, może to spowodować zapisanie bieżącego dokumentu. Jeśli obsłużysz zdarzenie KeyDown, właściwość ModifiersKeyEventArgs odebrana przez procedurę obsługi zdarzeń określa, które klawisze modyfikujące są naciskane. Alternatywnie, właściwość KeyData elementu KeyEventArgs określa znak, który został wciśnięty, a także wszelkie klawisze modyfikujące połączone przy użyciu operacji bitowej OR. Jeśli jednak obsługujesz zdarzenie KeyPress lub zdarzenie myszy, program obsługi zdarzeń nie otrzymuje tych informacji. W takim przypadku należy użyć właściwości ModifierKeys klasy Control. W obu przypadkach należy przeprowadzić operację bitową AND odpowiedniej wartości Keys i wartością, którą testujesz. Wyliczenie Keys oferuje różne warianty każdego klucza modyfikującego, dlatego ważne jest, aby wykonać bitową operację AND z właściwą wartością. Na przykład klucz SHIFT jest reprezentowany przez Shift, ShiftKey, RShiftKey i LShiftKey Poprawna wartość do przetestowania SHIFT jako modyfikatora jest Shift. Podobnie, aby przetestować CTRL i ALT jako modyfikatory, należy użyć odpowiednio wartości Control i Alt.

Notatka

Programiści języka Visual Basic mogą również uzyskiwać dostęp do kluczowych informacji za pośrednictwem właściwości Keyboard

Aby określić, który klawisz modyfikatora został naciśnięty

  • Użyj bitowego operatora AND z właściwością ModifierKeys i wartością wyliczenia Keys, aby określić, czy jest naciśnięty określony modyfikator. Poniższy przykład kodu pokazuje, jak określić, czy SHIFT jest naciskany w programie obsługi zdarzeń KeyPress.

    private:
        void textBox1_KeyPress(Object^ sender, KeyPressEventArgs^ e)
        {
            if ((Control::ModifierKeys & Keys::Shift) == Keys::Shift)
            {
                MessageBox::Show("Pressed " + Keys::Shift.ToString());
            }
        }
    
    public void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
        {
            MessageBox.Show("Pressed " + Keys.Shift);
        }
    }
    
    Public Sub TextBox1_KeyPress(ByVal sender As Object, _
        ByVal e As KeyPressEventArgs) Handles TextBox1.KeyPress
    
        If ((Control.ModifierKeys And Keys.Shift) = Keys.Shift) Then
            MsgBox("Pressed " + Keys.Shift.ToString())
        End If
    End Sub
    

Zobacz też