Gibt es einige globale Konstrukte, die ich verwenden kann, wenn ich darauf zugreifen muss, ob die Schaltflächen Strg, Umschalt, Alt gedrückt sind? Zum Beispiel innerhalb eines MouseDown
Ereignisses von a TreeView
.
Wenn das so ist, wie?
Klasse verwenden Keyboard
. Mit können Keyboard.IsKeyDown
Sie überprüfen, ob Strg, Umschalt, Alt jetzt deaktiviert ist.
Für die Schicht:
if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
{ /* Your code */ }
Zur Kontrolle:
if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
{ /* Your code */ }
Für Alt:
if (Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt))
{ /* Your code */ }
Es gibt auch:
// Have to get this value before opening a dialog, or user will have released the control key
if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
}
(e.Key == Key.F && e.KeyboardDevice.Modifiers == ModifierKeys.Control)
anstelle aller anderenKeyboard.Modifiers == ModifierKeys.Shift
Anweisung. Wenn Sie die Umschalttaste abfangen möchten, sich aber nicht darum kümmern, ob andere Modifikatoren gleichzeitig gedrückt werden, verwenden Sie die(Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift
oder die viel bessere HasFlag-SyntaxKeyboard.Modifiers.HasFlag(ModifierKeys.Shift)
WIN+RightArrow
.Keyboard.Modifiers
zeigt alsNone
quelle
So gehe ich damit um (mit PreviewKeyDown), sagen wir, wir suchen nach Alt + R ...
Vielleicht kann jemand klären, warum ich e.SystemKey und nicht nur e.Key verwenden musste, vielleicht aufgrund des Modifikators? Aber das hat bei der Suche nach Modifikator + Schlüssel einwandfrei funktioniert.
quelle
und auch:
wenn My.Computer.Keyboard.ShiftKeyDown dann ...
My.Computer.Keyboard.CtrlKeyDown
My.Computer.Keyboard.AltKeyDown
quelle
Teilweise von @Josh entlehnt und @Krushik etwas ähnlich, und auch auf eine Frage zum Unterschied zwischen KeyEventArgs.systemKey und KeyEventArgs.Key verweisen (Antwort darauf, warum Josh SystemKey verwenden muss); wobei mit Modifikatortasten (wie Alt) e.Key Key.System zurückgibt und sich somit der 'echte' Schlüssel innerhalb von e.SystemKey befindet.
Eine Möglichkeit, dies zu umgehen, besteht darin, zuerst den "echten" Schlüssel abzurufen und dann Ihre Bedingung zu erfüllen:
quelle