如何通过数组使用部分搜索并输出结果?

时间:2017-04-23 12:52:53

标签: c# search arraylist binary-search-tree avl-tree

我在listBox中有一个包含国家/地区名称的数组。当我输入textBox时,我想要任何以textBox中的内容开头的国家/地区。

所以,如果我输入:B =>的 razil

不是这样的:A => A rgentina,Engl a nd

仅当它以textBox中的内容开头。全文也可以。

arraylist不仅包含名称,而且下面的代码只提取名称。 List2是我想用于搜索的arraylist。

 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);
        }
    }

3 个答案:

答案 0 :(得分:1)

如果您的目标是避免输入完整的国家/地区名称,则无需重新创建新的用户界面。 TextBox已经可以使用您的代码来完成您尝试重现的所有管道。您所需要的只是数据来源和设置一对属性

// 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;

答案 1 :(得分: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);
    }
}

答案 2 :(得分:0)

不太确定,但您需要查看将列表框的数据源设置为

之类的内容
listBox1.DataSource = Mytree.List.Where(a=>a.name.StartsWith(textBox7.Text)

使用foreach循环添加每个项目的示例有点多余。