2017-04-23 2 views
0

J'ai un tableau avec les noms de pays dans un listBox. Quand j'entre dans le textBox, je veux que n'importe quel pays qui commence avec ce qui est dans le textBox à montrer.Comment utiliser la recherche partielle dans un tableau et afficher les résultats?

Donc, si j'entrez: B =>B RÉSIL

Pas comme ceci: A =>A rgentine, Engl un e

seulement si elle commence avec ce qui est dans la zone de texte . Les mots complets fonctionneraient également. L'arrayliste contient plus que des noms, mais le code ci-dessous extrait uniquement les noms. List2 est l'arraylist que je veux utiliser pour la recherche.

private void textBox7_TextChanged(object sender, EventArgs e) 
    { 
     listBox1.ClearSelected(); 
     listBox1.DataSource = null; 
     foreach (Country name2 in Mytree.List) 
     { 
      List2.Add(name2.name); 
      Console.WriteLine(List2); 
     } 
    } 
+0

Vous ne savez pas ce que vous voulez faire. Vous voulez ajouter à votre listbox tous les noms de pays qui commencent par votre texte tapé dans le TextBox? Au fait, essayez-vous simplement d'aider votre utilisation finale à sélectionner un pays particulier sans taper tout son nom? Avez-vous essayé d'utiliser la fonctionnalité de saisie semi-automatique du TextBox? – Steve

Répondre

0

private void textBox7_TextChanged(object sender, EventArgs e) 
{ 
    listBox1.ClearSelected(); 
    listBox1.DataSource = null; 
    var matchingCountries = Mytree.List.Where(l=>l.name.StartsWith(textBox7.Text)); 
    foreach (Country name2 in matchingCountries) 
    { 
      listBox1.Items.Add(name2.name); 
    } 
} 
+0

Cela fonctionne presque, sauf qu'il crée des doublons. Donc le mot Brésil crée 6 instances du Brésil comme je l'épelle. –

0

Pas tout à fait sûr, mais vous voulez regarder le réglage de la source de données de la zone de liste à quelque chose comme

listBox1.DataSource = Mytree.List.Where(a=>a.name.StartsWith(textBox7.Text) 

Votre exemple d'utiliser une boucle foreach pour ajouter chaque l'article est un peu redondant.

+0

Cela fonctionne bien pour le premier caractère. Et si je voulais vérifier chaque caractère du mot? –

+0

Ce n'est pas vrai, si vous mettez cela sur l'Evénement TextChanged, il chargera la liste déroulante avec toutes les valeurs dans Mytree.List où la propriété "name" de l'objet StartsWith quelle que soit la valeur est dans la zone de texte. –

+0

Et s'il y avait le Chili et la Chine, StartsWith me donnerait tous les deux. Comment puis-je restreindre la recherche encore plus? StartsWith ne regarde que le premier caractère. –

1

Si votre objectif est d'éviter de taper le nom complet du pays, il n'est pas nécessaire de réinventer un nouveau type d'interface utilisateur. Le TextBox a déjà toute la plomberie disponible pour faire ce que vous essayez de reproduire avec votre code. Tout ce dont vous avez besoin est une source de vos données et les paramètres d'une paire de propriétés

// Create the list to use as the custom source. 
var source = new AutoCompleteStringCollection(); 
source.AddRange(new string[] 
{ 
    "Argentina", 
    "England", 
    "Brazil", 
    "Italy", 
    "..." 
}); 

textBox1.AutoCompleteCustomSource = source; 
textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend; 
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;