如何通过单个TextBox文本框实现多值搜索功能
RichTextBox多值搜索高亮修改方案
核心修改逻辑:
- 读取搜索框输入内容,用
~作为分隔符切分出多个独立搜索值,自动过滤空值,兼容连续分隔符、首尾带分隔符的异常输入场景 - 保留原有富文本内容重置逻辑,每次搜索前清空上一轮的高亮效果
- 替换原有单值匹配逻辑,遍历所有拆分出的搜索值,逐个匹配文本中所有出现位置并设置黄色高亮
- 修复原代码中索引步进逻辑的小问题,避免短关键词重复匹配、长关键词漏匹配的情况
- 保留原有计时器启动逻辑,不影响原有业务流程
修改后可直接运行的完整代码:
private void button1_Click(object sender, EventArgs e) { // 重置富文本框状态,清除历史搜索高亮 string sourceText = richTextBox1.Text; richTextBox1.Text = ""; richTextBox1.Text = sourceText; // 按~分隔拆分多个搜索关键词,自动移除空条目 string[] searchKeys = textBox1.Text.Split( new[] { '~' }, StringSplitOptions.RemoveEmptyEntries ); // 遍历所有关键词执行匹配高亮 foreach (string key in searchKeys) { if (string.IsNullOrEmpty(key)) continue; int searchStartIndex = 0; while (searchStartIndex < richTextBox1.TextLength) { // 查找当前关键词的匹配位置 int matchIndex = richTextBox1.Find( key, searchStartIndex, richTextBox1.TextLength, RichTextBoxFinds.None ); // 无更多匹配时跳出当前关键词的搜索循环 if (matchIndex == -1) break; // 给匹配到的文本设置高亮背景 richTextBox1.SelectionBackColor = Color.Yellow; // 搜索起点移动到当前匹配内容之后,避免重复匹配 searchStartIndex = matchIndex + key.Length; } } this.timer1.Start(); }
可选扩展配置
- 需要不区分大小写匹配时,将
Find方法的最后一个参数改为RichTextBoxFinds.None | RichTextBoxFinds.NoCase - 需要整词精确匹配(避免匹配到单词的部分片段)时,追加
RichTextBoxFinds.WholeWord枚举值即可
内容的提问来源于stack exchange,提问作者Nishant Bangera
相关产品推荐
相关产品推荐

