读书人

使用RichTextBox.Find (String, Int32

发布时间: 2012-05-05 17:21:10 作者: rapoo

使用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
[解决办法]


C# code
   /// <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);            }        }
[解决办法]
啊哦 学习了 正好有个东西要用这个

读书人网 >C#

热点推荐