在字符串集合中筛选包含指定文本的项并添加至ListBox
解决方案:根据输入文本筛选集合中的字符串并添加到ListBox
我懂你的需求啦——你想要根据TextBox里输入的内容,从字符串集合里筛选出包含该输入文本的项,再把它们添加到ListBox中,但之前的代码逻辑不对,所以没实现效果。
问题出在哪?
你之前用的collection.Contains(textBox1.Text)是在检查整个集合里有没有和输入文本完全一样的元素,而不是检查集合里的每个元素是否包含输入文本,而且还没考虑大小写的问题(比如你的示例里"iphone x"和"IPHONE X"应该都要匹配)。
正确的实现方法
这里以C# WinForms为例,给出完整的实现逻辑:
- 先清空ListBox(避免重复添加旧内容)
- 获取输入文本,先处理空值和首尾空格的情况(提升用户体验)
- 遍历集合中的每个字符串,检查该字符串是否包含输入文本(忽略大小写更友好)
- 把符合条件的字符串添加到ListBox
代码示例:
// 假设你的字符串集合是这样定义的 var stringCollection = new List<string> { "iphone x sadasd", "IPHONE X s325g", "Another string" }; // 清空ListBox,避免重复展示旧内容 listBox1.Items.Clear(); // 获取输入文本并去除首尾空格 string inputText = textBox1.Text.Trim(); // 如果输入为空,直接返回(也可以选择显示全部内容,看你的需求) if (string.IsNullOrEmpty(inputText)) { return; } // 遍历集合,筛选符合条件的字符串 foreach (string item in stringCollection) { // 检查当前字符串是否包含输入文本,忽略大小写 if (item.IndexOf(inputText, StringComparison.OrdinalIgnoreCase) >= 0) { listBox1.Items.Add(item); } }
补充说明
- 如果你更习惯用
Contains方法,也可以用它的重载版本来忽略大小写:if (item.Contains(inputText, StringComparison.OrdinalIgnoreCase)) StringComparison.OrdinalIgnoreCase是推荐的忽略大小写方式,比用ToLower()/ToUpper()更高效,也能避免一些文化相关的匹配问题。- 如果需要实时筛选(用户输入时就自动更新ListBox),可以把这段代码放到
textBox1_TextChanged事件的处理方法里。
内容的提问来源于stack exchange,提问作者bkir knk
相关产品推荐
相关产品推荐

