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

Posted

技术标签:

【中文标题】在 InputBox 上编写的 ListBox 中搜索单词(C# VS)【英文标题】:Search for word in ListBox written on InputBox (C# VS) 【发布时间】:2022-01-05 19:08:16 【问题描述】:

我有一个带有单词的 ListBox,我需要单击一个按钮来打开一个 InputBox,我可以在其中搜索一个单词,然后程序将运行 ListBox 并突出显示我在 InputBox 中写的单词(如果它在那里)。如果程序到达列表的末尾并且没有找到该词,那么我将得到一个消息框,说明我正在寻找的词不存在。我需要为这个程序使用某种循环。

我知道如何制作按钮、输入框和错误消息框,但不知道如何进行搜索和循环。

我在这里阅读了很多类似的问题,但我认为它们中的任何一个都不会返回我正在寻找的结果。

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

这是为 Winforms 准备的。

【问题讨论】:

Winforms 还是 WPF? @aybe Winforms。抱歉没有提及,不知道 WPF 是一件事 从 UX 的角度来看 FWIW,你想要的方式让它对最终用户来说非常复杂。 @aybe 是的,我知道,但这是我在 HS 的信息应用课上的练习。不幸的是,我的老师不是一个很好的人。 看看我的回答是否有帮助。 【参考方案1】:

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

每当文本更改时 在列表中查找匹配项 选择它们

代码:

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

当然,列表选择模式必须是多重的才能正常工作。

此外,如果没有匹配项,您需要清除选择,以免 UI 处于模棱两可的状态(未完成)。

【讨论】:

谢谢!它工作得很好,我只需要适应 InputBox 并插入错误消息。再次感谢! 干得好,欢迎您! 你真的不应该做别人的作业。我知道做这些小任务很有趣,但你不认为给 OP 一些提示让他/她继续工作会更好吗?看看meta.***.com/questions/334822/… 好吧,我故意不匹配这个问题,他得到了一个很好的提示,设法将它集成到他的设置中,希望他学到了一些东西而不是盲目地复制结果,我希望如此......我认为通过例子学习很好,这不是他们在学校应该做的吗?想象一下,如果我让你做一些面包,然后扔给你,面粉,水和一个烤箱,没有进一步的解释;你很可能会失败,更重要的是你会厌倦 IMO。

以上是关于在 InputBox 上编写的 ListBox 中搜索单词(C# VS)的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 在 Qt 上编写的自动测试应用程序

在大型 PHP 框架之一上编写的论坛/板

使用 WinHttpHandler 与 HttpClientHandler 在 Net Framework 上编写的应用程序

如何将使用 Pandas 在 Spark 集群上编写的文件移动到 HDFS?

我正在使用@media 查询,但我在不同屏幕上编写的代码不起作用

我可以确保在 5.10+ 上编写的 Perl 代码可以在 5.8 上运行吗?