【问题标题】:How to use partial search through an array and output the results?如何通过数组使用部分搜索并输出结果?
【发布时间】:2017-04-23 12:52:52
【问题描述】:

我在列表框中有一个包含国家名称的数组。当我输入 textBox 时,我希望显示以 textBox 中的内容开头的任何国家/地区。

所以如果我输入:B => Brazil

不是这样:A => Argentina, England

仅当它以文本框中的内容开头时。完整的单词也可以。

arraylist 不仅包含名称,而且下面的代码仅提取名称。 List2 是我要用于搜索的数组列表。

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

【问题讨论】:

  • 不清楚你想做什么。您想将所有以您在 TextBox 中键入的文本开头的国家名称添加到您的列表框中吗?顺便说一句,您是否只是想帮助您的最终用户选择一个特定的国家而不输入其所有名称?您是否尝试过使用 TextBox 的自动完成功能?

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


【解决方案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;

【讨论】:

    【解决方案2】:

    不太确定,但您会希望将列表框的数据源设置为类似

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

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

    【讨论】:

    • 这适用于第一个字符。如果我想让它检查单词的每个字符呢?
    • 那不是真的,如果你把它放在 TextChanged 事件上,它会加载带有 Mytree.List 中所有值的组合框,其中项目“名称”属性 StartsWith 文本框中的任何值。
    • 如果有智利和中国,StartsWith 会给我两个。如何进一步缩小搜索范围? StartsWith 只查看第一个字符。
    • 但这正是您所要求的“当我输入文本框时,我希望以文本框中的内容开头的任何国家/地区显示。”。用你自己的话来说“开始于”。如果您想要不同的东西,请更新您的问题,详细说明您想要什么。
    【解决方案3】:

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

    【讨论】:

    • 这几乎可以工作,但它会创建重复项。所以巴西这个词在我拼写时创建了 6 个巴西实例。
    猜你喜欢
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多