C#记事本-查找与替换

来源:互联网 发布:windows和安卓平板 编辑:程序博客网 时间:2024/05/18 01:36

看了网上关于记事本的查找替换很多,但都没有达到我想要的结果,然后自己学习总结了以下的方法

统计字符串(汉字,字母,数字,字符)

先上效果图


定义全局变量

        #region  =★*★*★= 〖查找替换〗的自定义变量 =★*★*★=        /// <summary> 获取或设置查找起始位置 </summary>        static int Index = 0;        /// <summary> 查找到的字符串数量 </summary>        static int count = 0;        /// <summary> 查找字符是否变更        static string strE = string.Empty;        /// <summary> 记录原始光标位置 </summary>        static int MemoIndex = -1;        /// <summary> 过度字符串变量 </summary>        static string str = string.Empty;        /// <summary> 实例化富文本 </summary>        static RichTextBox r = new RichTextBox();        #endregion


向上查找

        #region  =★*★*★= FindUp() 查找指定〖字符 或 字符串〗 =★*★*★=        /// <summary>向上查找指定〖字符 或 字符串〗(不区分大小写)<para> <para>          /// 参数1(rbox):内容文本框,指定为 RichTextBox 文本框类型<para>          /// 参数2(str):用户指定要查找的字符串</para>          /// </para></para> </summary>          /// <param name="rbox">内容文本框,指定为 RichTextBox 文本框类型</param>          /// <param name="str">用户指定要查找的字符串</param>          public static void FindUp(RichTextBox rtxt, string str)        {            if (strE != str)            {                rtxt.SelectionStart = rtxt.Text.Length;                strE = str;            }            Index = rtxt.SelectionStart;            Index = rtxt.Find(str, 0, Index, RichTextBoxFinds.Reverse);            if (Index >= 0)            {                rtxt.SelectionStart = Index;                rtxt.SelectionLength = str.Length;                count++;                rtxt.Focus();                myColor(rtxt);//设定关键字为颜色                if (Index <= 0)                {                    seeks(str);                    count = 0;                }            }            else if (Index < 0)            {                seeks(str);                count = 0;            }        }        #endregion


向下查找

        #region  =★*★*★=  FindDown() 查找指定〖字符 或 字符串〗=★*★*★=        /// <summary>向下 查找指定〖字符 或 字符串〗<para> </para>          /// 参数1(rbox):内容文本框,指定为 RichTextBox 文本框类型  <para></para>        /// 参数2(FindStr):用户指定要查找的字符串<para></para>        /// 参数3(TrueFales):bool 真:限定大小写 假:不分大小写</summary>        /// <param name="rbox">内容文本框,指定为 RichTextBox 文本框类型</param>          /// <param name="FindStr">用户指定要查找的字符串</param>          /// <param name="TrueFales">bool 真:限定大小写 假:不分大小写</param>          public static void FindDown(RichTextBox rtxt, string FindStr,bool TrueFales)        {            if (TrueFales)                fileFindDownMax(rtxt, FindStr);            else                fileFindDownMin(rtxt, FindStr);        }        #endregion        #region  =★*★*★= 简单的从上到下查找 =★*★*★=        /// <summary>向下查找指定〖字符 或 字符串〗(限定大小写)<para> <para>          /// 参数1(rbox):内容文本框,指定为 RichTextBox 文本框类型          /// <para>参数2(FindStr):用户指定要查找的字符串</para>          /// </para></para> </summary>          /// <param name="rbox">内容文本框,指定为 RichTextBox 文本框类型</param>          /// <param name="FindStr">用户指定要查找的字符串</param>          private static void FindDownmax(RichTextBox rtxt, string FindStr)        {            Index = rtxt.Find(FindStr, Index, RichTextBoxFinds.MatchCase);            if (Index < 0 || Index > rtxt.Text.Length)            {                seeks(FindStr);                count = 0;                Index = 0;            }            else            {                rtxt.Select(Index, FindStr.Length);                myColor(rtxt);//设定关键字为颜色                Index += FindStr.Length;                rtxt.Focus();            }        }        /// <summary>向下查找指定〖字符 或 字符串〗(不区分大小写)<para> <para>          /// 参数1(rbox):内容文本框,指定为 RichTextBox 文本框类型          /// <para>参数2(FindStr):用户指定要查找的字符串</para>          /// </para></para> </summary>          /// <param name="rbox">内容文本框,指定为 RichTextBox 文本框类型</param>          /// <param name="FindStr">用户指定要查找的字符串</param>          private static void FindDownMin(RichTextBox rtxt, string FindStr)        {            Index = rtxt.Find(FindStr, Index, RichTextBoxFinds.None);            if (Index < 0 || Index > rtxt.Text.Length)            {                seeks(FindStr);                count = 0;                Index = 0;            }            else            {                rtxt.Select(Index, FindStr.Length);                myColor(rtxt);//设定关键字为颜色                Index += FindStr.Length;                rtxt.Focus();            }        }        #endregion        //* 类似 VS 的查找方法 */        #region  =★*★*★= 类似 VS 的查找方法 =★*★*★=        /// <summary>  类似 VS 的查找方法(不区分大小写向下查找)<para> </para>        /// 参数1(txt):RichTextBox文本框<para></para>        /// 参数2(FindString):查找字符串</summary>        /// <param name="txt">RichTextBox文本框</param>        /// <param name="FindString">查找字符串</param>        private static void fileFindDownMax(RichTextBox rtxt, string FindString)        {            if (MemoIndex < 0)            {                MemoIndex = rtxt.SelectionStart;                if (MemoIndex > 10 && MemoIndex + FindString.Length <= rtxt.Text.Length)                {                    str = rtxt.Text.Substring(0, MemoIndex + FindString.Length - 1);//截取光标位置 + 查找字符数 - 1 位数                    Index = rtxt.SelectionStart;                    r.Text = str;                }                else                {                    str = rtxt.Text;                    r.Text = rtxt.Text;                    Index = rtxt.SelectionStart;                }            }            if (Index < str.Length - (FindString.Length - 1) && Index >= 0)            {                Index = r.Find(FindString, Index, RichTextBoxFinds.None);                if (Index < 0 || Index > r.Text.Length)                {                    seeks(FindString);                    count = 0;                    Index = 0;                    MemoIndex = -1;                }                else                {                    rtxt.Select(Index, FindString.Length);                    myColor(rtxt);//设定关键字为颜色                    rtxt.Focus();                    count++;                    Index += FindString.Length;                    if (Index > str.Length - FindString.Length)                    {                        seeks(FindString);                        MemoIndex = -1;                        Index = 0;                        count = 0;                    }                }            }            else if (Index < rtxt.Text.Length && Index >= 0)            {                Index = rtxt.Find(FindString, Index, RichTextBoxFinds.None);                if (Index == -1)//(Index >= txt.Text.Length && Index <= 0)                {                    if (r.Text != "")                    {                        Index = 0; Index = r.Find(FindString, Index, RichTextBoxFinds.None);                        if (Index < 0 || Index > r.Text.Length)                        {                            seeks(FindString);                            count = 0;                            Index = 0;                            MemoIndex = -1;                        }                        else                        {                            rtxt.Select(Index, FindString.Length);                            myColor(rtxt);//设定关键字为颜色                            rtxt.Focus();                            Index += FindString.Length;                            count++;                            if (Index > str.Length - FindString.Length)                            {                                seeks(FindString);                                MemoIndex = -1;                                Index = 0;                                count = 0;                            }                        }                    }                    else                    {                        seeks(FindString);                        MemoIndex = -1;                        Index = 0;                        count = 0;                    }                }                else                {                    rtxt.Select(Index, FindString.Length);//在RichTextBox控件中搜索关键字                    Index += FindString.Length;//递增标识查询关键字的初始长度                    myColor(rtxt);//设定关键字为颜色                    rtxt.Focus();                    count++;                }            }            else            {                Index = 0; Index = r.Find(FindString, Index, RichTextBoxFinds.None);                if (Index < r.Text.Length - FindString.Length && Index >= 0)                {                    r.Select(Index, FindString.Length);                    rtxt.Select(Index, FindString.Length);                    myColor(rtxt);//设定关键字为颜色                    Index += FindString.Length;//递增标识查询关键字的初始长度                    rtxt.Focus();                    count++;                }                else                {                    seeks(FindString);                    MemoIndex = -1;                    Index = 0;                    count = 0;                }            }        }        /// <summary>  类似 VS 的查找方法(不区分大小写向下查找)<para> </para>        /// 参数1(txt):RichTextBox文本框<para></para>        /// 参数2(FindString):查找字符串</summary>        /// <param name="txt">RichTextBox文本框</param>        /// <param name="FindString">查找字符串</param>        private static void fileFindDownMin(RichTextBox rtxt, string FindString)        {            if (MemoIndex < 0)            {                MemoIndex = rtxt.SelectionStart;                if (MemoIndex > 10 && MemoIndex + FindString.Length <= rtxt.Text.Length)                {                    str = rtxt.Text.Substring(0, MemoIndex + FindString.Length - 1);                    Index = rtxt.SelectionStart;                    r.Text = str;                }                else                {                    str = rtxt.Text;                    r.Text = rtxt.Text;                    Index = rtxt.SelectionStart;                }            }            if (Index < str.Length - (FindString.Length - 1) && Index >= 0)            {                Index = r.Find(FindString, Index, RichTextBoxFinds.MatchCase);                if (Index < 0 || Index > r.Text.Length)                {                    seeks(FindString);                    count = 0;                    Index = 0;                    MemoIndex = -1;                }                else                {                    rtxt.Select(Index, FindString.Length);                    myColor(rtxt);//设定关键字为颜色                    rtxt.Focus();                    count++;                    Index += FindString.Length;                    if (Index > str.Length - FindString.Length)                    {                        seeks(FindString);                        MemoIndex = -1;                        Index = 0;                        count = 0;                    }                }            }            else if (Index < rtxt.Text.Length && Index >= 0)            {                Index = rtxt.Find(FindString, Index, RichTextBoxFinds.MatchCase);                if (Index == -1)                {                    if (r.Text != "")                    {                        Index = 0; Index = r.Find(FindString, Index, RichTextBoxFinds.MatchCase);                        if (Index < 0 || Index > r.Text.Length)                        {                            seeks(FindString);                            count = 0;                            Index = 0;                            MemoIndex = -1;                        }                        else                        {                            rtxt.Select(Index, FindString.Length);                            myColor(rtxt);//设定关键字为颜色                            rtxt.Focus();                            Index += FindString.Length;                            count++;                            if (Index > str.Length - FindString.Length)                            {                                seeks(FindString);                                MemoIndex = -1;                                Index = 0;                                count = 0;                            }                        }                    }                    else                    {                        seeks(FindString);                        MemoIndex = -1;                        Index = 0;                        count = 0;                    }                }                else                {                    rtxt.Select(Index, FindString.Length);//在RichTextBox控件中搜索关键字                    Index += FindString.Length;//递增标识查询关键字的初始长度                    myColor(rtxt);//设定关键字为颜色                    rtxt.Focus();                    count++;                }            }            else            {                Index = 0; Index = r.Find(FindString, Index, RichTextBoxFinds.MatchCase);                if (Index < r.Text.Length - FindString.Length && Index >= 0)                {                    r.Select(Index, FindString.Length);                    rtxt.Select(Index, FindString.Length);                    myColor(rtxt);//设定关键字为颜色                    Index += FindString.Length;//递增标识查询关键字的初始长度                    rtxt.Focus();                    count++;                }                else                {                    seeks(FindString);                    MemoIndex = -1;                    Index = 0;                    count = 0;                }            }        }        #endregion


替换 全部替换(功能不是很全)

        #region  =★*★*★= 〖替换〗与〖全部替换〗 =★*★*★=        #region  =★*★*★= 单次替换字符串 =★*★*★=        /// <summary> 替换 </summary>        /// <param name="rtxt">RichTextBox</param>        /// <param name="FindString">查找字符串</param>        /// <param name="ReplString">替换字符串</param>        /// <param name="TrueFalse">(bool值)区分大小写<para> </para>真:区分<para></para>假:不区分</param>        public static void replaces(RichTextBox rtxt, string FindString, string ReplString, bool TrueFalse)        {            string txtSt = rtxt.SelectedText;            if (FindString.Equals(txtSt))            {                int fs = FindString.Length;                int rs = ReplString.Length;                int cs = fs - rs;                rtxt.SelectionLength = FindString.Length;                rtxt.SelectionColor = Color.Coral;                rtxt.SelectedText = ReplString;//textBox2中放要替换的字符                  rtxt.Focus();                MemoIndex = -1;                rtxt.SelectionStart += cs;            }            FindDown(rtxt, FindString, TrueFalse);        }        #region  =★*★*★= 替换字符串 =★*★*★=        /// <summary>替换字符串<para> </para>          /// 参数1(FindString):查找的内容<para></para>          /// 参数2(ReplString):要替换的内容  </summary>          /// <param name="FindString">查找的内容</param>          /// <param name="ReplString">要替换的内容</param>          private static void replace(RichTextBox rtxt, string FindString, string ReplString)        {            rtxt.SelectionLength = FindString.Length;            rtxt.SelectedText = ReplString;//textBox2中放要替换的字符              Index = rtxt.SelectionStart;//获取或设置光标选定位置        }        #endregion        #endregion        #region  =★*★*★= 〖全部替换〗 =★*★*★=        /// <summary> 全部替换<para> </para>        /// 参数1(txt):RichTextBox 文本框<para></para>        /// 参数2(FindString):查找字符串<para></para>        /// 参数3(ReplString):替换字符串<para></para>        /// 参数4(trueFales):bool 真:区分大小写,假:不区分大小写</summary>        /// <param name="txt">RichTextBox 文本框</param>        /// <param name="FindString">查找字符串</param>        /// <param name="ReplString">替换字符串</param>        /// <param name="trueFales">bool 真:区分大小写,假:不区分大小写</param>        public static void ReplAll(RichTextBox rtxt, string FindString, string ReplString, bool trueFales)        {            if (trueFales)                onDistinCase(rtxt, FindString, ReplString);            else                offDistinCase(rtxt, FindString, ReplString);        }        #region  =★*★*★= 全部替换(区分/不区分大小写) =★*★*★=        /// <summary> 全部替换(区分大小写) </summary>        /// <param name="rtxt">RichTextBox 文本框</param>        /// <param name="FindStr">查找字符串</param>        /// <param name="ReplStr">替换字符串</param>        private static void onDistinCase(RichTextBox rtxt, string FindStr, string ReplStr)        {            while (Index >= 0 || Index <= rtxt.Text.Length)            {                int cot = FindStr.Length - ReplStr.Length;                Index = rtxt.Find(FindStr, Index, RichTextBoxFinds.MatchCase);                if (Index < 0 || Index > rtxt.Text.Length)                {                    DialogResult r = MessageBox.Show(string.Format("查找结束,已经为您找到{0}个结果。", count),                          "查找结果-Mxdr温馨提示!!", MessageBoxButtons.OK, MessageBoxIcon.Warning);                    if (r == DialogResult.Yes)                        count = 0;                    Index = 0;                    break;                }                else                {                    rtxt.Select(Index, FindStr.Length);                    replace(rtxt, FindStr, ReplStr);                    Index += FindStr.Length;                    count++;                }            }        }        /// <summary> 全部替换(不区分大小写) </summary>        /// <param name="rtxt">RichTextBox 文本框</param>        /// <param name="FindStr">查找字符串</param>        /// <param name="ReplStr">替换字符串</param>        private static void offDistinCase(RichTextBox rtxt, string FindStr, string ReplStr)        {            while (Index >= 0 || Index <= rtxt.Text.Length)            {                int cot = FindStr.Length - ReplStr.Length;                Index = rtxt.Find(FindStr, Index, RichTextBoxFinds.None);                if (Index < 0 || Index > rtxt.Text.Length)                {                    DialogResult r = MessageBox.Show(string.Format("查找结束,已经为您找到{0}个结果。", count),                          "查找结果-Mxdr温馨提示!!", MessageBoxButtons.OK, MessageBoxIcon.Warning);                    if (r == DialogResult.Yes)                        count = 0;                    Index = 0;                    break;                }                else                {                    rtxt.Select(Index, FindStr.Length);                    replace(rtxt, FindStr, ReplStr);                    Index += FindStr.Length;                    count++;                }            }        }        #endregion        #endregion        #endregion


消息弹窗

        #region  =★*★*★= 消息提示,提示用户查找结果 =★*★*★=        /// <summary> 消息提示,提示用户查找结果<para> <para>          /// 参数1(str):用户指定要查找的字符串</para></para> </summary>          /// <param name="str">用户指定要查找的字符串</param>          public static void seeks(string str)        {            if (count != 0)                MessageBox.Show(string.Format("已查找完毕,共〖{0}〗个 \"{1}\"!", count, str), "查找结果-Mxdr温馨提示!!");            else MessageBox.Show(string.Format("没有查找到 \"{0}\"!", str), "查找 - Mxdr温馨提示!");        }        #endregion


查找字符着色

        #region  =★*★*★= 查找字符上色 =★*★*★=        /// <summary> 查找字符上色 </summary>        /// <param name="rtxt">RichTextBox</param>        private static void myColor(RichTextBox rtxt)        {            rtxt.SelectionColor = Color.Coral;        }        #endregion


以上都为个人的理解,有不全的地方请各位能指点迷津

这是我在C#专栏的问贴请教C#类似于VS的查找功能



0 0
原创粉丝点击