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

如何在C#多行TextBox中实现文本查找并高亮选中功能?

多行TextBox文本查找高亮实现方案

我开发一款带文本查找功能的应用时,需要在未保存为文件的多行TextBox中实现指定文本的查找与高亮选中,后续还要添加“查找下一个”功能。之前找到的方案多涉及SQL命令、返回文本行号或针对文件搜索,完全不匹配我的场景。

后来我自己找到了可行的解决方案,基础查找功能代码如下:

private void btnSearch_Click(object sender, EventArgs e)
{
    if (txtSearchText.Text.Trim().Length == 0)
    {
        MessageBox.Show("请输入搜索关键词,或点击关闭按钮。", "错误提示",
            MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    else
    {
        string strSearchString = txtSearchText.Text;
        int index = txtMain.Text.IndexOf(strSearchString);
        if (index != -1)
        {
            txtMain.Select(index, strSearchString.Length);
            txtMain.Focus();
            txtMain.ScrollToCaret();
        }
        else
        {
            MessageBox.Show("未找到指定内容", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}

扩展:“查找下一个”功能实现思路

如果要实现“查找下一个”,可以在类中维护一个变量记录当前搜索的起始位置,避免每次都从头开始查找:

private int _currentSearchStart = 0;

private void btnFindNext_Click(object sender, EventArgs e)
{
    string searchText = txtSearchText.Text.Trim();
    if (string.IsNullOrEmpty(searchText))
    {
        MessageBox.Show("请先输入搜索关键词", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        return;
    }

    int index = txtMain.Text.IndexOf(searchText, _currentSearchStart);
    if (index != -1)
    {
        txtMain.Select(index, searchText.Length);
        txtMain.Focus();
        txtMain.ScrollToCaret();
        _currentSearchStart = index + searchText.Length;
    }
    else
    {
        // 搜索到末尾后支持循环查找
        if (MessageBox.Show("已搜索到文本末尾,是否从头开始查找?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
        {
            _currentSearchStart = 0;
            btnFindNext_Click(sender, e);
        }
        else
        {
            _currentSearchStart = 0;
        }
    }
}

内容的提问来源于stack exchange,提问作者Ed Swafford

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:39:59