Question

J'ai un UserControl composé de trois TextBox.Sur un formulaire, je peux en avoir un ou plusieurs ou mon UserControl.Je souhaite implémenter mon propre comportement de tabulation, donc si l'utilisateur appuie sur Tab dans la deuxième TextBox, je ne devrais passer à la troisième TextBox que si quelque chose est entré dans la deuxième TextBox.Si rien n'est entré dans la deuxième TextBox, le contrôle suivant du formulaire doit avoir le focus selon le comportement normal des onglets.Si l'utilisateur n'a rien saisi dans le premier ou le deuxième TextBox et dans l'onglet Presse, il existe ce cas particulier où un contrôle sur le formulaire doit être ignoré.

En utilisant ProcessDialogKey, j'ai réussi à le faire fonctionner plutôt bien, mais j'ai toujours un problème.Ma question est de savoir s'il existe un moyen de détecter comment un contrôle WinForms a obtenu le focus, car j'aimerais également savoir si mon UserControl a obtenu le focus à partir d'un onglet ou d'un Shift-Tab, puis faire mes trucs étranges, mais si l'utilisateur clique sur le contrôle, je je ne veux rien faire de spécial.

Était-ce utile?

La solution

En règle générale, je dirais que remplacer le comportement standard de la touche TAB serait une mauvaise idée.Vous pouvez peut-être faire quelque chose comme désactiver la 3ème zone de texte jusqu'à ce qu'une entrée valide soit effectuée dans la 2ème zone de texte.

Cela dit, j'ai également enfreint cette règle à la demande du client.Nous avons fait en sorte que la touche Entrée fonctionne comme la touche de tabulation, où la touche Entrée enregistrait la valeur dans un champ de texte et faisait avancer le curseur vers le champ suivant.

Autres conseils

Je ne pense pas qu'il existe un moyen intégré permettant de le faire.Tous les événements de focus WinForms (GotFocus,LostFocus,Enter,Leave) sont appelés avec des paramètres EventArgs vides, ce qui ne vous donnera aucune information supplémentaire.

Personnellement, je désactiverais la troisième zone de texte, comme l'a dit Rob Thomas.Si vous êtes déterminé à le faire, il ne serait pas difficile de rédiger un manuel (lire :hackish) solution.Une fois la touche de tabulation enfoncée (si le focus est sur la deuxième zone de texte), définissez une variable dans votre formulaire.Si le prochain objet focalisé est alors la troisième zone de texte, alors vous savez exactement comment cela s'est produit.

La raison de ce comportement étrange des onglets est entièrement liée à la vitesse du processus de saisie.C'était vraiment bien d'avoir des commentaires, je n'avais pas pensé à désactiver une zone de texte mais cela pourrait réellement fonctionner.Mais utiliser la touche Entrée pour accepter la saisie ne m'avait même pas traversé l'esprit.Cela fonctionnera tellement mieux.L'utilisateur peut saisir les chiffres, puis appuyer sur Entrée pour accepter la saisie et la prochaine zone de texte possible sera celle active.C'est comme avoir le gâteau et le manger aussi. Le facteur de vitesse est là puisque lorsque vous utilisez la touche Entrée, aucune tabulation inutile ne doit être effectuée pour accéder au bon champ et l'utilisation de la touche Entrée à côté du clavier numérique le rend vraiment fluide.

Merci pour la contribution !

Je suis d'accord avec DannySmurf.Jouer avec l'ordre de tabulation pourrait vous donner l'enfer plus tard si les exigences de l'application changent.

Une autre chose que vous pourriez faire est d'implémenter une sorte d'assistant que l'utilisateur pourra parcourir.

Mieux que de désactiver les contrôles, essayez de jouer avec TabStop - si cela est faux, le contrôle sera simplement ignoré lors de la tabulation.

Je suggérerais également que l'événement Changed de TextBox soit l'endroit où mettre à jour TabStop sur les autres contrôles.

J'ai fait quelque chose de similaire avec un contrôle de connexion, où les utilisateurs pouvaient saisir soit un nom d'utilisateur, soit une adresse e-mail (dans des champs séparés), ainsi que leur mot de passe, et tabStop est ce que j'ai utilisé pour faire le travail.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top