如何在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
相关产品推荐
相关产品推荐

