winform、RichtextBox控件实现循环查找关键字向上查找,向下查找,全字匹配以及区分大小写

C# 同时被 3 个专栏收录
1 篇文章 0 订阅
1 篇文章 0 订阅
1 篇文章 0 订阅

查找起始点又光标所在位置开始搜索,向下查找到文章的末端会提示搜索到了起始点,如果再次点击查找下一个按钮则从文章的始端继续搜索循环下去(向上搜索反之),我发现搜索的时候如果最后字段为搜索内容则出现了无法循环查找的问题,所以我增加了处理该问题的代码段,以下代码段有些判断是我在父窗口和子窗体之间的调用判断,可以将之无视。 

        public int len1 = 0;
        public int len2 = 0;
        public int findlen = 0;
        public int flag = 0;
        public bool initfindindex = true;
        //mySon和myGreat_Great_Great_Grandson是子窗口,bjk是richtextbox控件,tabcl是选项页
        public void find_data()//查找关键字
        {
            if (mySon.tabcl.TabCount != 0)//这里判断我的选项页是否为空,请无视这个判断
            {
                if (initfindindex)//变量initfindindex判断是否重新输入搜索关键字,或者选择不同查找方式
                {
                    len1 = mySon.bjk[mySon.tabcl.SelectedIndex].SelectionStart;//获取光标所在文本位置,在该位置向上或向下搜索
                    len2 = mySon.bjk[mySon.tabcl.SelectedIndex].SelectionStart;
                    initfindindex = false;
                }

                if (myGreat_Great_Great_Grandson.radioButton2.Checked)//向下查找
                {
                    mySon.bjk[mySon.tabcl.SelectedIndex].Focus();//控件获取焦点
                    if (myGreat_Great_Great_Grandson.checkBox1.Checked)//全字匹配单选框是否按下
                    {
                        if (myGreat_Great_Great_Grandson.checkBox2.Checked)//全字匹配和区分大小写单选框是否同时按下
                        {
                            findlen = mySon.bjk[mySon.tabcl.SelectedIndex].Find(myGreat_Great_Great_Grandson.richTextBox1.Text, len1, RichTextBoxFinds.MatchCase | RichTextBoxFinds.WholeWord);//全字匹配并且区分大小写查找
                        }
                        else//只按下全字匹配单选框
                        {
                            findlen = mySon.bjk[mySon.tabcl.SelectedIndex].Find(myGreat_Great_Great_Grandson.richTextBox1.Text, len1, RichTextBoxFinds.WholeWord);//全字匹配查找
                        }
                    }
                    else if (myGreat_Great_Great_Grandson.checkBox2.Checked)//区分大小写单选框是否按下
                    {
                        findlen = mySon.bjk[mySon.tabcl.SelectedIndex].Find(myGreat_Great_Great_Grandson.richTextBox1.Text, len1, RichTextBoxFinds.MatchCase);//区分大小写查找
                    }
                    else
                    {
                        findlen = mySon.bjk[mySon.tabcl.SelectedIndex].Find(myGreat_Great_Great_Grandson.richTextBox1.Text, len1, RichTextBoxFinds.None);//不区分大小写并且不全字匹配查找
                    }

                    if (findlen < 0)//查找失败
                    {
                        if (len1 == mySon.bjk[mySon.tabcl.SelectedIndex].SelectionStart)
                        {
                            if (myGreat_Great_Great_Grandson.checkBox1.Checked)//全字匹配单选框是否按下
                            {
                                if (myGreat_Great_Great_Grandson.checkBox2.Checked)//全字匹配和区分大小写单选框是否同时按下
                                {
                                    findlen = mySon.bjk[mySon.tabcl.SelectedIndex].Find(myGreat_Great_Great_Grandson.richTextBox1.Text, 0, RichTextBoxFinds.MatchCase | RichTextBoxFinds.WholeWord);//全字匹配并且区分大小写查找
                                }
                                else//只按下全字匹配单选框
                                {
                                    findlen = mySon.bjk[mySon.tabcl.SelectedIndex].Find(myGreat_Great_Great_Grandson.richTextBox1.Text, 0, RichTextBoxFinds.WholeWord);//全字匹配查找
                                }
                            }
                            else if (myGreat_Great_Great_Grandson.checkBox2.Checked)//区分大小写单选框是否按下
                            {
                                findlen = mySon.bjk[mySon.tabcl.SelectedIndex].Find(myGreat_Great_Great_Grandson.richTextBox1.Text, 0, RichTextBoxFinds.MatchCase);//区分大小写查找
                            }
                            else
                            {
                                findlen = mySon.bjk[mySon.tabcl.SelectedIndex].Find(myGreat_Great_Great_Grandson.richTextBox1.Text, 0, RichTextBoxFinds.None);//不区分大小写并且不全字匹配查找
                            }

                            if (findlen < 0)
                            {
                                len1 = 0;//长度清零
                                MessageBox.Show("未找到相关内容!");
                            }
                            else
                            {
                                len1 = 0;//长度清零
                                MessageBox.Show("查找达到了搜索的起始点!");

                                len1 = findlen + myGreat_Great_Great_Grandson.richTextBox1.TextLength;
                            }
                        }
                        else
                        {
                            if (myGreat_Great_Great_Grandson.richTextBox1.TextLength != 0)//myGreat_Great_Great_Grandson.richTextBox1是查找内容超文本控件
                            {
                                len1 = 0;//长度清零
                                MessageBox.Show("查找达到了搜索的起始点!");

                                if (myGreat_Great_Great_Grandson.checkBox1.Checked)//全字匹配单选框是否按下
                                {
                                    if (myGreat_Great_Great_Grandson.checkBox2.Checked)//全字匹配和区分大小写单选框是否同时按下
                                    {
                                        findlen = mySon.bjk[mySon.tabcl.SelectedIndex].Find(myGreat_Great_Great_Grandson.richTextBox1.Text, 0, RichTextBoxFinds.MatchCase | RichTextBoxFinds.WholeWord);//全字匹配并且区分大小写查找
                                    }
                                    else//只按下全字匹配单选框
                                    {
                                        findlen = mySon.bjk[mySon.tabcl.SelectedIndex].Find(myGreat_Great_Great_Grandson.richTextBox1.Text, 0, RichTextBoxFinds.WholeWord);//全字匹配查找
                                    }
                                }
                                else if (myGreat_Great_Great_Grandson.checkBox2.Checked)//区分大小写单选框是否按下
                                {
                                    findlen = mySon.bjk[mySon.tabcl.SelectedIndex].Find(myGreat_Great_Great_Grandson.richTextBox1.Text, 0, RichTextBoxFinds.MatchCase);//区分大小写查找
                                }
                                else
                                {
                                    findlen = mySon.bjk[mySon.tabcl.SelectedIndex].Find(myGreat_Great_Great_Grandson.richTextBox1.Text, 0, RichTextBoxFinds.None);//不区分大小写并且不全字匹配查找
                                }

                                //mySon.bjk[mySon.tabcl.SelectedIndex].Select(findlen, myGreat_Great_Great_Grandson.richTextBox1.TextLength);//选中字体
                                //mySon.bjk[mySon.tabcl.SelectedIndex].SelectionBackColor = Color.Yellow;//选中字体背景颜色改变
                                len1 = findlen + myGreat_Great_Great_Grandson.richTextBox1.TextLength;
                            }
                        }
                    }
                    else
                    {
                        if (len1 == mySon.bjk[mySon.tabcl.SelectedIndex].TextLength)
                        {
                            MessageBox.Show("查找达到了搜索的起始点!");
                        }
                        //mySon.bjk[mySon.tabcl.SelectedIndex].Select(findlen, myGreat_Great_Great_Grandson.richTextBox1.TextLength);//选中字体
                        //mySon.bjk[mySon.tabcl.SelectedIndex].SelectionBackColor = Color.Yellow;//选中字体颜色改变
                        len1 = findlen + myGreat_Great_Great_Grandson.richTextBox1.TextLength;
                    }
                }
                else//向上查找
                {
                    mySon.bjk[mySon.tabcl.SelectedIndex].Focus();//控件获取焦点
                    if (myGreat_Great_Great_Grandson.checkBox1.Checked)//全字匹配单选框是否按下
                    {
                        if (myGreat_Great_Great_Grandson.checkBox2.Checked)//全字匹配和区分大小写单选框是否同时按下
                        {
                            findlen = mySon.bjk[mySon.tabcl.SelectedIndex].Find(myGreat_Great_Great_Grandson.richTextBox1.Text, 0, len2, RichTextBoxFinds.MatchCase | RichTextBoxFinds.WholeWord | RichTextBoxFinds.Reverse);//全字匹配并且区分大小写查找
                        }
                        else//只按下全字匹配单选框
                        {
                            findlen = mySon.bjk[mySon.tabcl.SelectedIndex].Find(myGreat_Great_Great_Grandson.richTextBox1.Text, 0, len2, RichTextBoxFinds.WholeWord | RichTextBoxFinds.Reverse);//全字匹配查找
                        }
                    }
                    else if (myGreat_Great_Great_Grandson.checkBox2.Checked)//区分大小写单选框是否按下
                    {
                        findlen = mySon.bjk[mySon.tabcl.SelectedIndex].Find(myGreat_Great_Great_Grandson.richTextBox1.Text, 0, len2, RichTextBoxFinds.MatchCase | RichTextBoxFinds.Reverse);//区分大小写查找
                    }
                    else
                    {
                        findlen = mySon.bjk[mySon.tabcl.SelectedIndex].Find(myGreat_Great_Great_Grandson.richTextBox1.Text, 0, len2, RichTextBoxFinds.Reverse);//不区分大小写并且不全字匹配查找
                    }

                    if (findlen < 0)//查找失败
                    {
                        if (myGreat_Great_Great_Grandson.checkBox1.Checked)//全字匹配单选框是否按下
                        {
                            if (myGreat_Great_Great_Grandson.checkBox2.Checked)//全字匹配和区分大小写单选框是否同时按下
                            {
                                findlen = mySon.bjk[mySon.tabcl.SelectedIndex].Find(myGreat_Great_Great_Grandson.richTextBox1.Text, 0, mySon.bjk[mySon.tabcl.SelectedIndex].TextLength, RichTextBoxFinds.MatchCase | RichTextBoxFinds.WholeWord | RichTextBoxFinds.Reverse);//全字匹配并且区分大小写查找
                            }
                            else//只按下全字匹配单选框
                            {
                                findlen = mySon.bjk[mySon.tabcl.SelectedIndex].Find(myGreat_Great_Great_Grandson.richTextBox1.Text, 0, mySon.bjk[mySon.tabcl.SelectedIndex].TextLength, RichTextBoxFinds.WholeWord | RichTextBoxFinds.Reverse);//全字匹配查找
                            }
                        }
                        else if (myGreat_Great_Great_Grandson.checkBox2.Checked)//区分大小写单选框是否按下
                        {
                            findlen = mySon.bjk[mySon.tabcl.SelectedIndex].Find(myGreat_Great_Great_Grandson.richTextBox1.Text, 0, mySon.bjk[mySon.tabcl.SelectedIndex].TextLength, RichTextBoxFinds.MatchCase | RichTextBoxFinds.Reverse);//区分大小写查找
                        }
                        else
                        {
                            findlen = mySon.bjk[mySon.tabcl.SelectedIndex].Find(myGreat_Great_Great_Grandson.richTextBox1.Text, 0, mySon.bjk[mySon.tabcl.SelectedIndex].TextLength, RichTextBoxFinds.Reverse);//不区分大小写并且不全字匹配查找
                        }
                        if (findlen < 0)
                        {
                            len2 = 0;
                            MessageBox.Show("未找到相关内容!");
                        }
                        else
                        {
                            len2 = 0;//长度清零
                            MessageBox.Show("查找达到了搜索的起始点!");

                            len2 = findlen;
                        }
                    }
                    else
                    {
                        if (len2 == 0)
                        {
                            MessageBox.Show("查找达到了搜索的起始点!");
                        }
                        //mySon.bjk[mySon.tabcl.SelectedIndex].Select(findlen, myGreat_Great_Great_Grandson.richTextBox1.TextLength);//选中字体
                        //mySon.bjk[mySon.tabcl.SelectedIndex].SelectionColor = Color.Red;//选中字体颜色改变
                        len2 = findlen;
                    }
                }
            }
        }

运行效果如下图

以上注释不够详细的地方或者有疑问点地方,欢迎留言交流讨论 

转载请附上链接,谢谢。

 

 

 

 

  • 2
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

假装取了个名字

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值