C#实现记事本查找与替换功能

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

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

先上效果图

定义全局变量

#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#实现记事本查找与替换功能 的全部内容, 来源链接: utcz.com/z/350858.html

回到顶部