Capturez plusieurs clics de touches en C #
Comment puis-je capturer plusieurs clés de bas en C# lorsque vous travaillez dans un Windows Forms forme?
J'ai juste ne peut pas sembler obtenir à la fois la flèche haut et flèche vers la droite en même temps.
source d'informationauteur Presidenten | 2009-04-02
Vous devez vous connecter pour publier un commentaire.
Je pense que vous serez mieux de rabais lorsque vous utilisez les GetKeyboardState la fonction de l'API.
Dans l'événement KeyDown, vous demandez simplement de l '"état" du clavier.
Le GetKeyboardState va remplir le tableau d'octets que vous lui donnez, et chaque élément de ce tableau représente l'état d'une touche.
Vous pouvez accéder à chaque keystate en utilisant la valeur numérique de chaque code de touche virtuelle. Lors de l'octet pour cette clé est définie à 129 128, cela signifie que la clé est appuyé). Si la valeur de cette clé est 1 ou 0, la clé est (pas pressé). La valeur 1 est destiné à basculé état de la clé (par exemple, le verrouillage des majuscules état).
Pour les détails, voir le La documentation de Microsoft pour GetKeyboardState.
Un peu de la preuve-de-concept de code pour vous, en supposant que
Form1
contientlabel1
:Avec
vous pouvez gérer plusieurs keydowns.
Hmm, il y a des événements distincts pour chaque touche vers le bas?
Vous pouvez créer quatre booléens pour chaque flèche. Lorsqu'il est activé, définissez le booléen de la flèche pour vrai. Si libéré est tiré, définissez le booléen de la flèche à false.
Vous pouvez aussi vérifier si la droite et les booléens sont true et ensuite faire votre action.
Utiliser SPY++ pour voir comment les downs sont licenciés. En gros, si plusieurs touches sont maintenues enfoncées dans le même temps, la première clé qui a été touché le feu des événements, puis, lorsque la seconde clé est touché, il va commencer la cuisson et vous ne verrez plus les événements de la première. Lorsqu'ils sont libérés, vous verrez leur clé des événements. Je vous suggère de mettre en œuvre le bool drapeaux suggéré plus tôt sa simple et rapide.
Il y a une bibliothèque gérée MouseKeyHook que nuget qui vous donne un confort wrapper géré. Le code Source sur github.
Récemment en charge la détection des raccourcis, des combinaisons de touches et des séquences a été ajouté. Voici un exemple d'utilisation de traiter avec des flèches:
Pour plus d'informations, voir: La détection des Combinaisons de touches et Seuqnces