Haut, Bas, Gauche et Droite les touches fléchées de ne pas déclencher l'événement KeyDown
Je suis la construction d'une application où toutes les clés d'entrée doivent être traités par le windows lui-même.
Je set tabstop à false pour chaque contrôle de la sorcière pouvait saisir le focus à l'exception d'un panneau (mais je ne sais pas si cela a de l'effet).
J'ai mis KeyPreview de vrai et je suis de la manipulation de l'événement KeyDown sur ce formulaire.
Mon problème est que, parfois, la flèche ne sont pas adaptées plus:
-
L'événement keydown n'est pas déclenché lorsque j'ai appuyé sur seulement une des flèches du clavier.
-
L'événement keydown est déclenché si j'appuie sur une touche de direction avec le contrôle de modificateur.
Avez-vous une idée de pourquoi mon flèche soudainement cesser le tir de l'événement?
- Pouvez-vous poster le code que vous avez obtenu dans votre gestionnaire d'événement KeyDown.
- Peut-être que ce sera vous aider? stackoverflow.com/questions/902767/...
- Maxime, je suis assez sûr que si une fenêtre contient tous les contrôles enfants, les événements clés de touches fléchées sera supprimé. La question liée à la traite d'une forme ayant pas de contrôle. Daniel Waltrip du problème n'était pas vraiment la même.
- Je ne suis pas sûr de comprendre - pourquoi serait-ce un problème ici?
- support.microsoft.com/kb/320584
Vous devez vous connecter pour publier un commentaire.
J'ai eu exactement le même problème. Je l'ai considéré comme la réponse de @Snarfblam fourni; cependant, si vous lisez la documentation MSDN, le ProcessCMDKey méthode est destinée à remplacer la clé des événements pour les éléments de menu dans une application.
Récemment, je suis tombé sur cet article de microsoft, qui a l'air très prometteur: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.previewkeydown.aspx. Selon microsoft, la meilleure chose à faire est de définir
e.IsInputKey=true;
dans lePreviewKeyDown
événement après la détection à l'aide des touches fléchées. Cela permettra de feu leKeyDown
événement.Cela a fonctionné assez bien pour moi et qu'il était moins hack-ish de remplacer l'ProcessCMDKey.
IsInputKey
est danse
classe:e.IsInputKey=true
.Je suis en utilisant PreviewKeyDown
Voir Rodolfo Neuber réponse pour la meilleure réponse
(Ma réponse):
Dérivent d'une classe de contrôle et vous pouvez remplacer la méthode ProcessCmdKey. Microsoft a choisi d'ignorer ces clés à partir d'événements KeyDown parce qu'ils touchent de multiples contrôles et passer le focus, mais cela rend très difficile de faire une application réagir à ces clés de toute autre manière.
Malheureusement, il est assez difficile de réaliser cela avec les touches fléchées, en raison des restrictions dans les événements KeyDown. Cependant, il existe quelques façons de contourner ce problème:
Je vous recommande d'essayer l'utilisation de cette classe. Il est assez simple de le faire:
Si vous l'utilisez en combinaison avec l'événement KeyDown, je pense que vous pouvez de manière fiable d'atteindre votre objectif.
J'ai eu un problème similaire lors de l'appel de la fenêtre WPF de WinForms.
Toutefois, en montrant la fenêtre comme un dialogue, il a travaillé
Espère que cette aide.
Afin de capturer les frappes à un contrôle de Formulaires, vous devez dériver une nouvelle classe qui est basée sur la classe du contrôle que vous voulez, et vous remplacer la ProcessCmdKey().
Exemple :
Source complet...Les touches fléchées en C#
Vayne
La meilleure façon de le faire, je pense, est de gérer comme il le dit sur MSDN
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.previewkeydown.aspx
Mais de la gérer, comment vous en avez vraiment besoin. Mon chemin (dans l'exemple ci-dessous) est d'attraper tous les KeyDown 😉
j'ai eu le même problème et a déjà été en utilisant le code de la réponse choisie. ce lien a été la réponse pour moi; peut-être pour d'autres aussi.
Comment faire pour désactiver la navigation sur WinForm avec des flèches en C#?