首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

使用RichTextBox.Find (String, Int32, Int32, RichTextBoxFinds)后没有突出显示找到的文本,如何解决

2012-05-05 
使用RichTextBox.Find (String, Int32, Int32, RichTextBoxFinds)后没有突出显示找到的文本,怎么解决?模仿

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

热点排行