À l'aide de la fonctionnalité saisie semi-automatique de la zone de liste déroulante, tout en limitant les valeurs à ceux de la liste?
En WinForms 2.0, une liste déroulante a une fonctionnalité d'Auto-complétion, qui affiche une coutume liste Déroulante avec les valeurs qui commencent par le texte saisi.
Cependant, si je veux limiter les valeurs valides uniquement à celles qui apparaissent dans la zone de liste déroulante la liste des éléments, je peux le faire que par le réglage de la DropDownStyle
à DropDownList
, qui s'arrête à l'utilisateur de saisir une valeur.
Cependant, maintenant, je ne peux pas utiliser la fonctionnalité d'Auto-complétion, ce qui nécessite la saisie de l'utilisateur.
Est-il une autre façon de limiter les entrées de la liste, tout en permettant l'utilisation de la fonctionnalité d'Auto-complétion? Notez que j'ai vu certaines solutions personnalisées pour cela, mais j'aime vraiment la façon dont la mise en correspondance Automatique, les éléments sont affichés dans une liste Déroulante, et triés même si la liste d'origine peut ne pas l'être.
EDIT: j'ai pensé juste de valider la valeur saisie, c'est à dire les tests de la saisie de l'utilisateur si elle est valide dans, disons, la TextChanged
événement, ou même à l'aide de la Validating
événement. La question qui se pose alors est ce qui est le comportement attendu? Puis-je effacer de leur valeur (une valeur vide est également invalide), ou dois-je utiliser une valeur par défaut? La plus proche valeur correspondante?
P. s. Est-il d'autres balises que je pourrais ajouter à cette question?
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé de réglage
AutoCompleteMode = AutoCompleteMode.SuggestAppend
etAutoCompleteSource = AutoCompleteSource.ListItems
? Qui permet à l'utilisateur type, mais il n'accepte que les mots qui sont dans leComboBox
. Le seul hic, c'est que le comportement a changé pour Win7 (voir Zone de liste déroulante.SelectedValue ne correspond pas du texte affiché lorsque DropDownStyle = DropDownList dans Windows 7).Que des étiquettes, vous pouvez essayer de "zone de liste déroulante" et ".net".
Cette solution a fonctionné pour moi:
Il pourrait être aussi simple que cela:
Vous pourriez crochet de la pression de touche ou de l'événement textchanged et de valider que le texte saisi est une première correspondance de sous-chaîne pour au moins un des éléments de la liste, en rejetant la pression de touche (ou la suppression de la plus récente caractère) si pas. La seule question que je peux penser à est qu'il peut être un peu déroutant pour l'utilisateur que certains commentaires ne sont pas acceptés (en particulier lors de la saisie du premier caractère, à ce point de la liste de saisie semi-automatique ne sera pas visible encore, de sorte qu'ils ne savent pas ce que les valeurs valides sont).
Ou simplement l'utiliser dans la liste déroulante mode - les gens peuvent encore type et il va passer à la correspondante premier élément de la liste...
Vous pouvez définir le "SuggestAppend propriété SuggestAppend" et "AutoCompleteSource" à "ListItems" qui présentera une liste et ajouter le tapé dans l'caractères par vous de la liste déroulante.
Aussi, si pas sélectionné, alors même le apprpiate ValueMemeber sera sélectionné pour l'déroulant.
La façon dont je l'ai fait c'est de vérifier la valeur par rapport à la liste des valeurs possibles lorsqu'elles sortent de la boîte et ne pas les laisser partir une valeur non valide. Je ne sais pas comment vous voulez gérer lorsque vous trouvez qu'ils ont d'entrée une valeur non valide, mais c'est ce que j'ai fait dans le passé.
Je cherchais à faire la même chose et suis tombé sur cette question. Voici ce que j'ai trouvé.
Créer un événement KeyDown gestionnaire de la zone de liste déroulante et un contrôle de la touche Enter. Notez qu'après que l'utilisateur appuie sur entrer le texte dans la zone de liste déroulante est sélectionné (comme dans, sélectionné comme si vous faisiez une coupure ou d'une opération de copie) et de concentration reste dans la zone de liste déroulante.
Si l'entrée a été pressée appeler une fonction de validation qui permettra de faire ce que vous estimez nécessaire si la valeur entrée est de bon/mauvais.
Vous pouvez appeler cette fonction à un Congé de gestionnaire d'événement pour empêcher l'utilisateur de quitter la zone de liste déroulante jusqu'à ce qu'un choix est fait.
Ou quelque chose à cet effet, mais vous obtenez l'idée.
J'ai le même problème... j'ai posé la même question ( Comment faire pour forcer l'utilisateur à prendre une suggestion de l'entrée dans une zone de liste déroulante? ) et puis j'ai mis en oeuvre avec des événements, mais j'ai eu beaucoup de code qui peut être amélioré par la généralisation du comportement... s'il vous plaît dites-moi si vous l'avez obtenu facilement. Merci!
Cela a fonctionné pour moi.
J'ai utilisé une Table de données comme source de données