¿Hay algunas construcciones globales que puedo usar cuando necesito acceder si los botones Control, Shift, Alt están presionados? Por ejemplo dentroMouseDown
evento de a TreeView
.
¿Si es así, cómo?
Usa la clase Keyboard
. Utilizando Keyboard.IsKeyDown
puedes comprobar si Control, Shift, Alt está abajo ahora.
Por turno:
if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
{ /* Your code */ }
Para el control:
if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
{ /* Your code */ }
Para Alt:
if (Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt))
{ /* Your code */ }
También hay:
// 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)
lugar de todas las demás cosas ...Keyboard.Modifiers == ModifierKeys.Shift
instrucción. Si desea captar la tecla Mayús pero no le importa si se presionan otros modificadores al mismo tiempo, use la(Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift
sintaxis HasFlag o la mejor sintaxisKeyboard.Modifiers.HasFlag(ModifierKeys.Shift)
WIN+RightArrow
.Keyboard.Modifiers
muestra comoNone
fuente
Así es como lo manejo (usando PreviewKeyDown), digamos que estamos buscando Alt + R ...
Tal vez alguien pueda aclarar por qué tuve que usar e.SystemKey y no solo e.Key, ¿tal vez debido al modificador? pero esto ha funcionado perfectamente para mí cuando busco modificador + tecla.
fuente
y también:
si My.Computer.Keyboard.ShiftKeyDown entonces ...
My.Computer.Keyboard.CtrlKeyDown
My.Computer.Keyboard.AltKeyDown
fuente
En parte tomando prestado de @Josh, y algo similar a @Krushik, y también haciendo referencia a una pregunta sobre la diferencia entre KeyEventArgs.systemKey y KeyEventArgs.Key (respondiendo por qué Josh tiene que usar SystemKey); en donde, con las teclas modificadoras (como Alt), e.Key devuelve Key.System y, por lo tanto, la clave 'real' está dentro de e.SystemKey.
Una forma de evitar esto es buscar primero la clave 'real' y luego hacer su condicional:
fuente