2017-03-17 4 views
1

Je ne comprends pas pourquoi cela fonctionne avec un modificateur et une touche, mais pas un modificateur et plusieurs touches (lorsque Ctr + R + S + V sont pressés tous ensemble). Et s'il y a une solution de contournement?Plusieurs clés dans KeyDown

if ((Keyboard.Modifiers == ModifierKeys.Control) 
     && (e.Key == Key.R) 
     && (e.Key == Key.S) 
     && (e.Key == Key.V)) 
{ ... } 
+1

Vous voulez dire que vous voulez attraper CTRL + R + S + V, tous pressés ensemble? – Evk

+1

La clé est une variable, elle ne peut pas être égale à 3 valeurs différentes en même temps –

+0

http://stackoverflow.com/a/19013440/6240567 - cela pourrait aider - @ArsenMkrtchyan a frappé le clou sur la tête, je pense. Cette réponse montre comment détecter * plusieurs * touches pressées en même temps :) EDIT: La réponse d'Evk ci-dessous (postée en même temps que ce commentaire) est quasiment la même :) –

Répondre

3

énumération Key ne porte pas de Flags et ne peut donc pas contenir plusieurs valeurs. Et il y a juste une propriété Key dans les arguments de cet événement, donc juste une clé. Par conséquent, votre if ne peut jamais être vraie car 3 de vos conditions && s'excluent mutuellement.

Ce que vous pouvez faire est plutôt ceci:

if ((Keyboard.Modifiers == ModifierKeys.Control) 
       && (Keyboard.IsKeyDown(Key.R)) 
       && (Keyboard.IsKeyDown(Key.S)) 
       && (Keyboard.IsKeyDown(Key.V))) { 

} 

Notez que si vous souhaitez autoriser d'autres touches de modification à presser en même temps (donc, si vous ne vous inquiétez pas si les deux ALT et CONTROL peut être pressé ensemble par exemple), alors vous devez utiliser

à la place.