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ż
.NET Desktop feedback