在 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)的主要内容,如果未能解决你的问题,请参考以下文章
使用 WinHttpHandler 与 HttpClientHandler 在 Net Framework 上编写的应用程序
如何将使用 Pandas 在 Spark 集群上编写的文件移动到 HDFS?