查找和查找下一个
本文关键字:查找 下一个 | 更新日期: 2023-09-27 18:15:43
我使用两个表单,其中一个是带菜单和富文本框的富文本编辑器,第二个表单用于搜索和替换,包含四个按钮和两个文本框。我已经设法做找到按钮,但我有问题,找到下一步。我正在使用c# Windows Forms。
下面是我用来查找的代码:
private void button1_Click(object sender, EventArgs e)
{
RichTextBox frm1TB = ((Form1)this.Owner).txtDisplay;
int foundAt = frm1TB.Text.IndexOf(searchText.Text);
if (foundAt == -1)
{
MessageBox.Show("Not Found");
}
else
{
frm1TB.SelectionStart = foundAt;
frm1TB.SelectionLength = searchText.TextLength;
frm1TB.Focus();
}
}
查找下面的内容:
if (frm1TB.Text.Length >= frm1TB.Text.SelectionStart + frm1TB.Text.SelectionLength)
{
int foundAt = frm1TB.Text.IndexOf(
searchText.Text,
frm1TB.Text.SelectionStart + frm1TB.Text.SelectionLength);
}
您需要记住您找到上一个条目的索引(或者更好的是,您应该开始查找下一个搜索),然后简单地使用IndexOf(string, int)
过载,它允许您在指定位置开始搜索。首先,只需将下一个搜索开始索引字段添加到您的类:
private int nextSearchStartIndex;
现在,您的Find
方法需要适当地更新这个索引:
if (foundAt == -1)
{
this.nextSearchStartIndex = 0;
MessageBox.Show("Not Found");
}
else
{
this.nextSearchStartIndex = foundAt + searchText.TextLength;
// ...
}
和FindNext
变得微不足道:
// ...
var foundAt = frm1TB.Text.IndexOf(searchText.Text,
this.nextSearchStartIndex);
// Here you can use exactly same update index logic as in Find
你不能使用IndexOf()方法,你必须切换到正则表达式
这是一个如何在richbox中轻松获取所有搜索条目的示例。文本:
using System.Text.RegularExpressions;
Regex re = new System.Text.RegularExpressions.Regex(searchText.Text.ToString(),RegexOptions.None);
MatchCollection mc = re.Matches(frm1TB.Text.ToString());
foreach (var ma in mc)
{
//do what you want
}