在 InputBox 上写的 ListBox 中搜索单词(C# VS)

Search for word in ListBox written on InputBox (C# VS)

我有一个带有单词的列表框,我需要单击一个按钮打开一个输入框,我可以在其中搜索单词,程序将 运行 列表框并突出显示我在输入框中写的单词,如果在那。如果程序到达列表的末尾但没有找到该词,那么我将收到一个消息框,说明我要查找的词不存在。我需要为这个程序使用某种循环。

我知道按钮、输入框和错误消息框是怎么做的,但是我不知道怎么查找和循环。

我在这里读了很多类似的问题,但我不认为其中任何一个 return 我正在寻找的结果。

谁能帮帮我?或者将我重定向到带有答案的 post?

这是针对 Winforms 的。

这应该让你走上正轨,它几乎是不言自明的:

  • 每当文本更改时
  • 在列表中查找匹配项
  • select 他们

代码:

private void textBox1_TextChanged(object sender, EventArgs e)
{
    var textBox = sender as TextBox ?? throw new InvalidOperationException();

    var text = textBox.Text;

    if (string.IsNullOrWhiteSpace(text))
        return; // nothing to search for

    const StringComparison comparison = StringComparison.InvariantCultureIgnoreCase; // maybe change this

    // find items matching text

    var indices = new List<int>();

    for (var i = 0; i < listBox1.Items.Count; i++)
    {
        var item = listBox1.Items[i];

        if (string.Equals(item?.ToString(), text, comparison))
            indices.Add(i);
    }

    // select them in list

    if (!indices.Any())
        return;

    listBox1.SelectedIndices.Clear();

    foreach (var index in indices) 
        listBox1.SelectedIndices.Add(index);
}

当然,list select离子模式必须是多个才能正常工作。

此外,如果没有匹配项,您需要清除 selection,以免 UI 处于不明确的状态(未完成)。