Comment déterminer quel contrôle sur le formulaire a le focus?
J'ai lu ailleurs sur ici que pour capturer la touche "Entrée" de l'avc dans une zone de texte et l'utiliser comme s'appuyant sur un bouton, je devrais définir la propriété KeyPreview de la forme de vrai et de vérifier la valeur de KeyDown.
Je veux être en mesure d'utiliser cette fonctionnalité sur plusieurs contrôles de zone de texte qui sont chacune associées à un autre Bouton.
Ma question est comment puis-je savoir qui contrôle causé l'événement KeyPress?
L'expéditeur est répertorié comme le formulaire lui-même.
G
OriginalL'auteur G-. | 2009-02-04
Vous devez vous connecter pour publier un commentaire.
Chaque formulaire a une propriété pour un bouton "Accepter" & "Annuler", ce sont les boutons qui sont "cliqué" lorsque l'utilisateur appuie sur entrée et d'échappement respectivement.
Vous pouvez changer le bouton par défaut comme chaque contrôle reçoit le focus (vous pouvez avoir un got d'événements de focus virage par bouton et de le partager avec un ensemble de zones de texte)
Si vous faites cela, alors l'apparence des boutons de changement en donnant à l'utilisateur une indication visuelle de leur dire qui est le bouton par défaut.
Alternativement, si vous ne voulez pas le faire, vous pouvez utiliser le bouton "ActiveControl" de la propriété, et de tester pour voir lequel des ensembles de zones de texte auquel il appartient.
Avez-vous demandé vous-même, ce qui devrait le bouton par défaut si elle n'est pas une de thse zones de texte?
G-'commentaire clued moi où j'allais mal, merci pour plus de détails. Mon application est la plupart du temps juste un dialogue, de sorte qu'il n'a même pas un bouton et ne ferme jamais, sauf lorsque vous le quittez.
OriginalL'auteur Binary Worrier
J'ai trouvé une solution qui semble fonctionner.
Je ne peux pas aider mais pense qu'il doit y avoir une meilleure façon!
--EDIT--EDIT--EDIT--EDIT--EDIT--
Bien, d'après les suggestions ci-dessous (merci) j'ai trouvé une "meilleure" façon pour moi dans cette circonstance.
Évidemment par le piégeage de l'événement sur la zone de texte plutôt que sur la forme je n'ai pas besoin de vous soucier de se concentrer. Une fois de plus je me sens stupide de ne pas penser à qui a si longtemps!
OriginalL'auteur G-.
Avez-vous essayé Forme.ActiveControl?
OriginalL'auteur Mike Marshall
Vous pouvez utiliser ce code comme un point de départ pour capturer les principaux événements de la forme. Le ActiveControl est celui qui a le focus. Dans cet exemple, il est flexible pour l'ajout d'autres actions sur "Entrée" lorsque vous êtes dans les différentes zones de texte sur le formulaire. C'est VB.NET mais vous devriez être en mesure de convertir facilement en C#.
OriginalL'auteur HardCode