You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过单个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 00:18:15