使用RichTextBox.Find (String, Int32, Int32, RichTextBoxFinds)后没有突出显示找到的文本,怎么解决?
模仿记事本中的 查找功能, 能查找,但是不突出显示找到的文本, 当查找的小窗口关闭后,主界面上的richtextbox1上的文本,才突出显示查到的文本。
Form1.cs中的
public RichTextBox RichTextBox1
{
get
{ return richTextBox1; }
set
{ richTextBox1 = value; }
}
SearchForm2.cs 中的
查找下一个按钮click事件代码
private void button1_Click(object sender, EventArgs e)
{
Form1 f1 = (Form1)this.Owner;
string str=textBox1.Text;
if (isdown) //向下查找
{
if (f1.RichTextBox1.SelectionStart + f1.RichTextBox1.SelectionLength < f1.RichTextBox1.Text.Length)
{
if (islow)
{
try
{
f1.RichTextBox1.SelectionStart = f1.RichTextBox1.Find(str, f1.RichTextBox1.SelectionStart + f1.RichTextBox1.SelectionLength, f1.RichTextBox1.Text.Length, RichTextBoxFinds.MatchCase);
if(f1.RichTextBox1.SelectionStart==-1)
{
MessageBox.Show("无此字符串");
}
}
catch (Exception)
{
MessageBox.Show("已经到文件结尾", "查找提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
else
{
try
{
f1.RichTextBox1.SelectionStart = f1.RichTextBox1.Find(str, f1.RichTextBox1.SelectionStart + f1.RichTextBox1.SelectionLength, f1.RichTextBox1.Text.Length, RichTextBoxFinds.None);
if (f1.RichTextBox1.SelectionStart == -1)
{
MessageBox.Show("无此字符串");
}
}
catch (Exception)
{
MessageBox.Show("已经到文件结尾", "查找提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
else
{
MessageBox.Show("已经到文件结尾", "查找提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
else //向上查找
{
if (f1.RichTextBox1.SelectionStart > 0)
{
if (islow)
{
try
{
f1.RichTextBox1.SelectionStart = f1.RichTextBox1.Find(str, 0, f1.RichTextBox1.SelectionStart, RichTextBoxFinds.MatchCase | RichTextBoxFinds.Reverse);
if (f1.RichTextBox1.SelectionStart == -1)
{
MessageBox.Show("无此字符串");
}
}
catch (Exception)
{
MessageBox.Show("已经到文件头部");
}
}
else
{
try
{
f1.RichTextBox1.SelectionStart = f1.RichTextBox1.Find(str, 0, f1.RichTextBox1.SelectionStart, RichTextBoxFinds.None | RichTextBoxFinds.Reverse);
if (f1.RichTextBox1.SelectionStart == -1)
{
MessageBox.Show("无此字符串");
}
}
catch (Exception)
{ MessageBox.Show("已经到文件头部"); }
}
}
else
{
MessageBox.Show("已经到文件头部!");
}
}
}
问题出在哪了,这个问题让我纠结了很长的时间了。各位网友帮帮忙。先谢谢各位了。
[解决办法]
richTextBox1.HideSelection = false;
或者设置
richTextBox1.SelectionBackColor
[解决办法]
/// <summary> /// 消息响应 查找 /// </summary> public void Event_FindInText() { //文档中不存在 if (Text.Contains(findDlg.findWhat) == false) { MessageBox.Show("当前文档找不到" + "\"" + findDlg.findWhat.ToString() + "\""); return; } //从当前位置开始查找 int nlength = findDlg.findWhat.Length;//待查字符串长度 int nindex = activepage.richTextBox1.SelectionStart;//当前光标位置 int index = 0;//匹配项的索引位置 if (nindex >= 0 && nindex <= Text.Length) { if (findDlg.dwFlags == true) //向下查找 { nindex += activepage.richTextBox1.SelectionLength; //若选中区域,则查寻起点为区域末尾 index = Text.IndexOf(findDlg.findWhat, nindex); //匹配项的索引位置 if (index < 0) { MessageBox.Show("当前文档查找完毕!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } else //向上查找 { List<int> findout = new List<int>();//存储查寻结果,显示列表中最后一项 findout.Clear(); int pos = 0;//查寻起点 //将查找结果存入findout; while (index < nindex && index != -1) { index = Text.IndexOf(findDlg.findWhat, pos); if (index >= 0 && index < nindex) { findout.Add(index); pos = index + nlength; } } if (findout.Count == 0) { MessageBox.Show("当前文档查找完毕!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } index = findout[findout.Count - 1]; } //高亮查找结果 activepage.richTextBox1.Select(index, findDlg.findWhat.Length); //使光标所在行可见,需要修改滚动条位置 int scrollPos = activepage.richTextBox1.GetPositionFromCharIndex(activepage.richTextBox1.SelectionStart).Y; page_ShowActiveLine(scrollPos); } }
[解决办法]
啊哦 学习了 正好有个东西要用这个