collection textbox Autocomplete
-
20-09-2019 - |
Question
Dans les fenêtres forme une zone de texte peut être transformé en une zone de texte de saisie semi-automatique en lui donnant une simple liste de chaînes ou en lui donnant une source personnalisée qui ne peut être AutoCompleteCollection qui est une forte liste dactylographiée de chaînes. Je voudrais être en mesure d'ajouter une clé à chaque string..so que chaque fois que la suggestion est sélectionnée, je peux saisir cette clé.
Je pourrais juste dessinerez un blank..but ce que quelqu'un a une suggestion? Merci à l'avance
La solution
La AutoCompleteStringCollection certainement de classe n'est pas scellé pour que vous puissiez en tirer et de créer une surcharge de Ajouter qui prend deux paramètres:. Une clé et une valeur
Ensuite, vous pouvez suivre que dans un dictionnaire. Vous devrez stocker la chaîne deux fois (une fois dans la collection de la classe de base et une fois dans votre dictionnaire), mais vous pouvez ajouter une méthode de recherche comme ceci:
class KeyedAutoCompleteStringCollection : AutoCompleteStringCollection {
private readonly Dictionary<string,string> keyedValues =
new Dictionary<string,string>(StringComparer.OrdinalIgnoreCase);
public void Add(string value, string key) {
base.Add(value);
keyedValues.Add(value, key); // intentionally backwards
}
public string Lookup(string value) {
string key;
if (keyedValues.TryGetValue(value, out key)) {
return key;
}
else {
return null;
}
}
}
Autres conseils
Si je vous comprends bien, vous voulez que la valeur dans la zone de texte (qui peut être proposé automatiquement) d'avoir une valeur associée. Vous pouvez le faire en créant un Dictionary<string, string>
avec le texte de TextBox
comme la clé et ce que vous appelez la « clé » comme valeur. Chaque fois que vous souhaitez localiser la « clé » pour une valeur de TextBox
particulière, vous pouvez consulter le dictionnaire pour elle.
Bien sûr, un TextBox
peut ne pas être la meilleure façon de représenter vos données s'il doit y avoir une clé. S'il doit y avoir une clé, la ComboBox
(avec DropDownStyle
mis à ComboBoxStyle.DropDownList
) pourrait être une meilleure option.