Comment puis-je capturer les Touches.F1 quel que soit le concentré de contrôle sur un formulaire?
J'ai utilisé de l'événement KeyDown et un code simple comme if (e.KeyCode == Keys.F1)
pour capturer F1 est pressé sur un formulaire, MAIS si il y a quelques zones de texte sur le formulaire ou s'il y a des feuilles de calcul avec Dock Remplir sur le formulaire, puis le code ci-dessus devient inutile et ne fait rien. Mais je veux faire quelque chose quand l'utilisateur appuie sur la touche F1 sur ce formulaire. alors, comment faisons-nous de capture spécifique de l'événement keydown comme les F1 sur le formulaire..et je ne veux pas aller à l'itinéraire qui capture le KeyDown de tous les autres contrôles du formulaire et de les transmettre à la Forme pour le traitement. est-il le moyen le plus propre de faire cela?
Vous devez vous connecter pour publier un commentaire.
Oui, en effet, il y est. La bonne façon pour la forme de la poignée de la clé des événements indépendamment du contrôle qui a actuellement le focus d'entrée est de remplacer la
ProcessCmdKey
méthode de votre classe de la forme:Vous revenez
true
pour indiquer que vous avez géré la frappe et ne pas voulez qu'il soit transmis à d'autres contrôles. Si vous ne voulez qu'il soit transmis aux gestionnaires d'événements pour les autres contrôles, il suffit de retournerfalse
.Et vous êtes mieux de ignorant la
KeyPreview
de la propriété. C'est un anachronisme de la VB 6 jours et pas vraiment le meilleur moyen de faire cela dans le .Monde NET. Pour en savoir plus: L'inconvénient de l'élaboration de la Forme.KeyPreview = true?KeyPreview
fait usage de .NET de l'événement centré sur l'architecture, alors que vous êtes juste primordialWndProc
, le préféré Win3.1 (oui, c'est vrai, 1992 technologie) manière de faire.WndProc
(mais qui fonctionne aussi). L'infrastructure appelle cette méthode au moment approprié précisément pour la gestion de ces événements. En outre, faire les choses de cette manière vous permet de décider si vous voulez le cas échéant, être transmises à d'autres contrôles, ou pas.WndProc
quanduMsg=WM_KEYDOWN
. Et tout comme la vérification de la clé virtuelle codes dans l'api Win32, vous ne savez pas si l'utilisateur a entré la clé réelle ou sa version décalée (entre autres choses). À chacun son propre, mais je serais plus prudent API, j'appel le pire.KeyPreview
est une meilleure alternative.Définir la forme du
KeyPreview
de vrai. Ce sera assurez-vous que le formulaire d'obtenir la pression de touche d'abord les messages et si vous manipuler, vous pouvez définire.Handled = true
afin de ne pas transmises à des contrôles.Tour sur
KeyPreview
et toutes les clés de la presse dans le formulaire seront acheminés par l'intermédiaire de gestionnaires d'événements clés en premier.Une autre façon est de Remplacer la ProcessCmdKey fonction http://msdn.microsoft.com/en-us/library/system.windows.forms.control.processcmdkey(v=VS.100).aspx