KeyDown : en reconnaissant la pluralité de touches
Comment puis-je déterminer dans KeyDown
que CtrlUp a été pressé.
private void listView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Control && e.KeyCode == Keys.Up)
{
//do stuff
}
}
ne peut pas travailler, parce que jamais les deux touches sont enfoncées exactement dans la même seconde. Vous toujours d'abord de l' Ctrl et puis l'autre...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez vérifier les modificateurs de la KeyEventArgs comme suit:
Référence MSDN
KeyEventArgs
. Je suppose que vous êtes à l'aide de l'un deWindows.UI.Core
, à partir de laCoreWindow
événement. Cette réponse est à propos d'un événement différent.De la Page MSDN sur KeyEventArgs:
Dans le
KeyEventArgs
il y a des propriétés Ctrl, Alt et Maj qui indique si ces touches sont pressées.if(e.Control && e.KeyCode == Keys.A)
Vous pouvez essayer d'utiliser le
Keyboard
objet à détecter laIsKeyDown
de la propriété. Aussi, si vous ne voulez pas le raccourci du navigateur pour l'emporter, vous pouvez définirHandled
true à la propriété.Mais attention lors du parasitisme des raccourcis de navigateur car il pourrait causer de la confusion.Handled
ou IE va le ramasser. XBAP n'est pas très largement utilisé, mais j'ai pensé que je laisserais tu sais pourquoi je discute de gestion des navigateurs à tous 🙂 - Merci.Ce code ne fonctionne que si vous appuyez d'abord sur LeftCtrl, puis "en HAUT".
Si l'ordre n'a pas d'importance, je recommande celui-ci :
Dans ce cas, les combinaisons de touches Ctrl sont prises en compte, et n'ont pas d'importance sur l'ordre.
Vous pouvez utiliser le ModifierKeys propriété:
Noter que le ModifierKeys valeur peut être une combinaison de valeurs, donc, si vous voulez détecter qu' CTRL a été pressé, indépendamment de l'état de l' MAJ ou ALT clés, vous devrez effectuer une comparaison bit à bit comme dans mon exemple ci-dessus. Si vous voulez vous assurer que personne d'autres modificateurs ont été pressés, vous devez vérifier l'égalité:
ModifierKeys
est une propriété surControl
(comme un windows forms form) qui vous donnera des informations sur ce que les touches de contrôle communes sont actuellement d'être pressé.KeyData
qui vient avec les événements clés de l'contient des informations sur les touches de modification qui ont été pressées en même temps que la clé de l'origine de l'événement. Avec le recul, je dirais queModifierKeys
est plus intéressant avec clic de bouton ou d'événements similaires, et qu'il serait plus précis d'utiliserKeyData
pendant les grands événements.Je l'ai testé le code ci-dessous. il fonctionne...
cela fonctionnera pour vous. Attention à manipuler
KeyUp
événement et de ne paskeyDown
.Pour moi,
keyDown
n'ai pas de travail,keyU
p a travaillé au lieu de le même code.Je ne sais pas pourquoi, mais il me semble parce que
keyDown
événement se produit directement après que vous appuyez sur une touche, même si c'était ctrl clé, donc si vous avez appuyé sur ctrl+Up vous appuyez sur la touche ctrl avant le UP enfoncée et ainsi, l'événement va se produire avant que vous pouvez appuyer sur les autres, en appuyant sur la deuxième touche déclenche l'événement.Tout en utilisant
KeyUp
ne déclenche pas l'événement jusqu'à ce que vous relâchez la touche, de sorte que vous pouvez appuyer sur ctrl, puis appuyez sur la deuxième touche, ce qui va déclencher un événement.Il m'a fallu du temps pour trouver l'astuce que j'ai finalement nécessaire lorsqu'on essaie de détecter les touches [Alt][Droite]. Je l'ai trouvé ici: https://social.msdn.microsoft.com/Forums/vstudio/en-US/4355ab9a-9214-4fe1-87ea-b32dfc22946c/issue-with-alt-key-and-key-down-event?forum=wpf
Il se résume à quelque chose comme cela dans un
Shortcut
de la classe helper j'utilise:Après "re-mapping", les valeurs d'origine (avis de l'
e.Key == System.Windows.Input.Key.System ? e.SystemKey : e.Key
partie), la poursuite du traitement peut aller comme d'habitude.si (e.Contrôle && e.Shift && e.KeyCode == Touches.A)
{
}
vous pouvez essayer mon code de travail :
j'utilise ce code, car je ne sais pas pourquoi quand j'utilise :
n'a pas fonctionné.
vous devez vous rappeler les touches (c'est à dire dans un bool array). et de définir la position à 1 lors de sa pressé (keydown) et 0 en haut .
de cette façon, vous pouvez suivre plus d'une clé. Je suggère de faire un tableau pour les touches spéciales seulement
de sorte que vous pouvez faire: