Existe-t-il des constructions globales que je peux utiliser chaque fois que je dois accéder aux boutons Ctrl, Shift, Alt en bas? Par exemple, dans l'événement MouseDown
d'une TreeView
.
Si c'est le cas, comment?
Utilisez la classe Keyboard
. En utilisant Keyboard.IsKeyDown
vous pouvez vérifier si Ctrl, Maj, Alt est en bas maintenant.
Pour le décalage:
if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
{ /* Your code */ }
Pour le contrôle:
if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
{ /* Your code */ }
Pour Alt:
if (Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt))
{ /* Your code */ }
Il y a aussi:
// Have to get this value before opening a dialog, or user will have released the control key
if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
}
private bool IsShiftKey { get; set; }
private void OnPreviewKeyDown(object sender, KeyEventArgs e)
{
IsShiftKey = Keyboard.Modifiers == ModifierKeys.Shift ? true : false;
if ((Key.Oem3 == e.Key || ((IsShiftKey && Key.Oem4 == e.Key) || (IsShiftKey && Key.Oem6 == e.Key) || (IsShiftKey && Key.Oem5 == e.Key)) && (validatorDefn as FormatValidatorDefinition).format == "packedascii"))
{
e.Handled = true;
}
}
et aussi:
si My.Computer.Keyboard.ShiftKeyDown, alors ...
My.Computer.Keyboard.CtrlKeyDown
My.Computer.Keyboard.AltKeyDown
Voici comment je le gère (en utilisant PreviewKeyDown), disons que nous recherchons Alt + R ...
private void OnPreviewKeyDown(object sender, KeyEventArgs e)
{
if ((Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt)
&& e.SystemKey == Key.R)
{
//do whatever
}
}
Peut-être que quelqu'un peut expliquer pourquoi j'ai dû utiliser e.SystemKey et pas seulement e.Key, peut-être à cause du modificateur? mais cela a parfaitement fonctionné pour moi lors de la recherche du modificateur + clé.