C# Winforms实现InputBox输入内容搜索ListBox项并高亮匹配结果
C# WinForm ListBox 关键词搜索高亮实现代码
以下是你需要的遍历匹配核心逻辑,直接替换你按钮点击事件中对应部分即可,默认你已经通过InputBox拿到用户输入的关键词,存在searchKeyword变量中:
// 先清空之前的选中状态,避免旧选中项干扰 listBox1.ClearSelected(); bool hasMatched = false; // 遍历ListBox所有条目 for (int i = 0; i < listBox1.Items.Count; i++) { // 获取当前条目的显示文本,如果你给ListBox绑定了自定义数据源,这里对应改属性取值逻辑即可 string itemContent = listBox1.GetItemText(listBox1.Items[i]); // 此处是模糊匹配(包含关键词就命中),需要完全匹配的话改成 itemContent.Equals(searchKeyword, StringComparison.OrdinalIgnoreCase) if (itemContent.Contains(searchKeyword, StringComparison.OrdinalIgnoreCase)) { // 高亮选中当前匹配条目 listBox1.SetSelected(i, true); hasMatched = true; // 只需要匹配第一个结果就保留这行break,需要匹配所有符合的条目就删掉break break; } } // 无匹配结果时弹出提示,你可以直接复用自己已有的MessageBox逻辑 if (!hasMatched) { MessageBox.Show("搜索的词条不存在", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); }
可选调整说明
- 如果你的ListBox开启了多选模式,删掉代码中的
break,即可同时高亮所有符合关键词的条目 StringComparison.OrdinalIgnoreCase是忽略大小写匹配,需要严格区分大小写的话删除这个参数即可- 需要匹配到结果后自动滚动到对应条目位置的话,在
SetSelected代码后添加一行listBox1.TopIndex = i;即可 - 如果ListBox绑定的是自定义对象数据源,把
listBox1.GetItemText(listBox1.Items[i])替换为对应对象的属性取值,比如绑定的是List<自定义类>,就改成(listBox1.Items[i] as 自定义类).你要匹配的属性名
内容的提问来源于stack exchange,提问作者Nuke
相关产品推荐
相关产品推荐

