2010-02-15 6 views
0

Dans les formulaires Windows, une zone de texte peut être transformée en zone de saisie semi-automatique en lui donnant une liste simple de chaînes ou en lui attribuant une source personnalisée qui ne peut être qu'une liste typée de chaînes. Je voudrais être en mesure d'ajouter une clé à chaque chaîne ... de sorte que chaque fois qu'une suggestion est sélectionnée, je peux saisir cette clé.Saisie automatique de la zone de texte

Je dessine peut-être un blanc ... mais quelqu'un a-t-il une suggestion? Merci d'avance

+0

Je pensais que je pourrais hériter de l'AutoCompleteCollection et réimplémenter l'add and get, mais je peux seulement remplacer toString, getHashCode et Equals .... – irco

+0

Si vous répondez à la réponse de Josh, vous devriez le poster sur sa réponse. En ce qui concerne votre commentaire, vous pouvez implémenter une autre méthode avec le même nom mais des paramètres différents pour la surcharger. Vous pouvez uniquement remplacer les membres virtuels, mais vous pouvez toujours surcharger. –

+0

Vous n'avez pas besoin de "réimplémenter" (override). Au lieu de cela, vous ajoutez une surcharge. Cette méthode ne remplace pas la méthode Add existante qui prend un paramètre, elle ajoute une méthode Add supplémentaire qui prend 2 paramètres. Voir mon exemple dans ma réponse. – Josh

Répondre

2

La classe AutoCompleteStringCollection n'est pas scellée, donc vous pouvez certainement en dériver et créer une surcharge de Add qui prend deux paramètres: une clé et une valeur.

Ensuite, vous pouvez suivre cela 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; 
     } 
    } 

} 
0

Si je vous comprends bien, vous voulez la valeur dans la zone de texte (qui peut être auto suggérée) pour avoir une valeur associée. Vous pouvez le faire en créant un Dictionary<string, string> avec le texte TextBox comme clé et ce que vous appelez la «clé» comme valeur. Chaque fois que vous voulez localiser la «clé» pour une valeur particulière, vous pouvez vérifier le dictionnaire pour cela.

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é, le ComboBox (avec DropDownStyle défini sur ComboBoxStyle.DropDownList) peut être une meilleure option.

Questions connexes