C#實(shí)現(xiàn)記事本查找與替換功能
看了網(wǎng)上關(guān)于記事本的查找替換很多,但都沒(méi)有達(dá)到我想要的結(jié)果,然后自己學(xué)習(xí)總結(jié)了以下的方法:
統(tǒng)計(jì)字符串(漢字,字母,數(shù)字,字符)
先上效果圖
定義全局變量
#region =★*★*★= 〖查找替換〗的自定義變量 =★*★*★= /// <summary> 獲取或設(shè)置查找起始位置 </summary> static int Index = 0; /// <summary> 查找到的字符串?dāng)?shù)量 </summary> static int count = 0; /// <summary> 查找字符是否變更 static string strE = string.Empty; /// <summary> 記錄原始光標(biāo)位置 </summary> static int MemoIndex = -1; /// <summary> 過(guò)度字符串變量 </summary> static string str = string.Empty; /// <summary> 實(shí)例化富文本 </summary> static RichTextBox r = new RichTextBox(); #endregion
向上查找
#region =★*★*★= FindUp() 查找指定〖字符 或 字符串〗 =★*★*★=
/// <summary>向上查找指定〖字符 或 字符串〗(不區(qū)分大小寫(xiě))<para> <para>
/// 參數(shù)1(rbox):內(nèi)容文本框,指定為 RichTextBox 文本框類(lèi)型<para>
/// 參數(shù)2(str):用戶指定要查找的字符串</para>
/// </para></para> </summary>
/// <param name="rbox">內(nèi)容文本框,指定為 RichTextBox 文本框類(lèi)型</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);//設(shè)定關(guān)鍵字為顏色
if (Index <= 0)
{
seeks(str);
count = 0;
}
}
else if (Index < 0)
{
seeks(str);
count = 0;
}
}
#endregion
向下查找
#region =★*★*★= FindDown() 查找指定〖字符 或 字符串〗=★*★*★=
/// <summary>向下 查找指定〖字符 或 字符串〗<para> </para>
/// 參數(shù)1(rbox):內(nèi)容文本框,指定為 RichTextBox 文本框類(lèi)型 <para></para>
/// 參數(shù)2(FindStr):用戶指定要查找的字符串<para></para>
/// 參數(shù)3(TrueFales):bool 真:限定大小寫(xiě) 假:不分大小寫(xiě)</summary>
/// <param name="rbox">內(nèi)容文本框,指定為 RichTextBox 文本框類(lèi)型</param>
/// <param name="FindStr">用戶指定要查找的字符串</param>
/// <param name="TrueFales">bool 真:限定大小寫(xiě) 假:不分大小寫(xiě)</param>
public static void FindDown(RichTextBox rtxt, string FindStr,bool TrueFales)
{
if (TrueFales)
fileFindDownMax(rtxt, FindStr);
else
fileFindDownMin(rtxt, FindStr);
}
#endregion
#region =★*★*★= 簡(jiǎn)單的從上到下查找 =★*★*★=
/// <summary>向下查找指定〖字符 或 字符串〗(限定大小寫(xiě))<para> <para>
/// 參數(shù)1(rbox):內(nèi)容文本框,指定為 RichTextBox 文本框類(lèi)型
/// <para>參數(shù)2(FindStr):用戶指定要查找的字符串</para>
/// </para></para> </summary>
/// <param name="rbox">內(nèi)容文本框,指定為 RichTextBox 文本框類(lèi)型</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);//設(shè)定關(guān)鍵字為顏色
Index += FindStr.Length;
rtxt.Focus();
}
}
/// <summary>向下查找指定〖字符 或 字符串〗(不區(qū)分大小寫(xiě))<para> <para>
/// 參數(shù)1(rbox):內(nèi)容文本框,指定為 RichTextBox 文本框類(lèi)型
/// <para>參數(shù)2(FindStr):用戶指定要查找的字符串</para>
/// </para></para> </summary>
/// <param name="rbox">內(nèi)容文本框,指定為 RichTextBox 文本框類(lèi)型</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);//設(shè)定關(guān)鍵字為顏色
Index += FindStr.Length;
rtxt.Focus();
}
}
#endregion
//* 類(lèi)似 VS 的查找方法 */
#region =★*★*★= 類(lèi)似 VS 的查找方法 =★*★*★=
/// <summary> 類(lèi)似 VS 的查找方法(不區(qū)分大小寫(xiě)向下查找)<para> </para>
/// 參數(shù)1(txt):RichTextBox文本框<para></para>
/// 參數(shù)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);//截取光標(biāo)位置 + 查找字符數(shù) - 1 位數(shù)
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);//設(shè)定關(guān)鍵字為顏色
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);//設(shè)定關(guān)鍵字為顏色
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控件中搜索關(guān)鍵字
Index += FindString.Length;//遞增標(biāo)識(shí)查詢關(guān)鍵字的初始長(zhǎng)度
myColor(rtxt);//設(shè)定關(guān)鍵字為顏色
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);//設(shè)定關(guān)鍵字為顏色
Index += FindString.Length;//遞增標(biāo)識(shí)查詢關(guān)鍵字的初始長(zhǎng)度
rtxt.Focus();
count++;
}
else
{
seeks(FindString);
MemoIndex = -1;
Index = 0;
count = 0;
}
}
}
/// <summary> 類(lèi)似 VS 的查找方法(不區(qū)分大小寫(xiě)向下查找)<para> </para>
/// 參數(shù)1(txt):RichTextBox文本框<para></para>
/// 參數(shù)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);//設(shè)定關(guān)鍵字為顏色
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);//設(shè)定關(guān)鍵字為顏色
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控件中搜索關(guān)鍵字
Index += FindString.Length;//遞增標(biāo)識(shí)查詢關(guān)鍵字的初始長(zhǎng)度
myColor(rtxt);//設(shè)定關(guān)鍵字為顏色
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);//設(shè)定關(guān)鍵字為顏色
Index += FindString.Length;//遞增標(biāo)識(shí)查詢關(guān)鍵字的初始長(zhǎng)度
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值)區(qū)分大小寫(xiě)<para> </para>真:區(qū)分<para></para>假:不區(qū)分</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>
/// 參數(shù)1(FindString):查找的內(nèi)容<para></para>
/// 參數(shù)2(ReplString):要替換的內(nèi)容 </summary>
/// <param name="FindString">查找的內(nèi)容</param>
/// <param name="ReplString">要替換的內(nèi)容</param>
private static void replace(RichTextBox rtxt, string FindString, string ReplString)
{
rtxt.SelectionLength = FindString.Length;
rtxt.SelectedText = ReplString;//textBox2中放要替換的字符
Index = rtxt.SelectionStart;//獲取或設(shè)置光標(biāo)選定位置
}
#endregion
#endregion
#region =★*★*★= 〖全部替換〗 =★*★*★=
/// <summary> 全部替換<para> </para>
/// 參數(shù)1(txt):RichTextBox 文本框<para></para>
/// 參數(shù)2(FindString):查找字符串<para></para>
/// 參數(shù)3(ReplString):替換字符串<para></para>
/// 參數(shù)4(trueFales):bool 真:區(qū)分大小寫(xiě),假:不區(qū)分大小寫(xiě)</summary>
/// <param name="txt">RichTextBox 文本框</param>
/// <param name="FindString">查找字符串</param>
/// <param name="ReplString">替換字符串</param>
/// <param name="trueFales">bool 真:區(qū)分大小寫(xiě),假:不區(qū)分大小寫(xiě)</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 =★*★*★= 全部替換(區(qū)分/不區(qū)分大小寫(xiě)) =★*★*★=
/// <summary> 全部替換(區(qū)分大小寫(xiě)) </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("查找結(jié)束,已經(jīng)為您找到{0}個(gè)結(jié)果。", count),
"查找結(jié)果-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> 全部替換(不區(qū)分大小寫(xiě)) </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("查找結(jié)束,已經(jīng)為您找到{0}個(gè)結(jié)果。", count),
"查找結(jié)果-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 =★*★*★= 消息提示,提示用戶查找結(jié)果 =★*★*★=
/// <summary> 消息提示,提示用戶查找結(jié)果<para> <para>
/// 參數(shù)1(str):用戶指定要查找的字符串</para></para> </summary>
/// <param name="str">用戶指定要查找的字符串</param>
public static void seeks(string str)
{
if (count != 0)
MessageBox.Show(string.Format("已查找完畢,共〖{0}〗個(gè) \"{1}\"!", count, str), "查找結(jié)果-Mxdr溫馨提示!!");
else MessageBox.Show(string.Format("沒(méi)有查找到 \"{0}\"!", str), "查找 - Mxdr溫馨提示!");
}
#endregion
查找字符著色
#region =★*★*★= 查找字符上色 =★*★*★=
/// <summary> 查找字符上色 </summary>
/// <param name="rtxt">RichTextBox</param>
private static void myColor(RichTextBox rtxt)
{
rtxt.SelectionColor = Color.Coral;
}
#endregion
以上都為個(gè)人的理解,有不全的地方請(qǐng)各位能指點(diǎn)迷津。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:C#裝箱與拆箱操作的深入講解
欄 目:C#教程
下一篇:C#串口通訊概念及簡(jiǎn)單的實(shí)現(xiàn)方法
本文標(biāo)題:C#實(shí)現(xiàn)記事本查找與替換功能
本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/4808.html
您可能感興趣的文章
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新聞效果的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已安裝軟件變化的方法
- 01-10C#實(shí)現(xiàn)多線程下載文件的方法
- 01-10C#實(shí)現(xiàn)Winform中打開(kāi)網(wǎng)頁(yè)頁(yè)面的方法
- 01-10C#實(shí)現(xiàn)遠(yuǎn)程關(guān)閉計(jì)算機(jī)或重啟計(jì)算機(jī)的方法
- 01-10C#自定義簽名章實(shí)現(xiàn)方法
- 01-10C#文件斷點(diǎn)續(xù)傳實(shí)現(xiàn)方法
- 01-10winform實(shí)現(xiàn)創(chuàng)建最前端窗體的方法


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10C#通過(guò)反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁(yè)無(wú)法打開(kāi)的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新
- 01-10C#停止線程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過(guò)重寫(xiě)Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10C#中split用法實(shí)例總結(jié)
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文
- 01-10delphi制作wav文件的方法
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 04-02jquery與jsp,用jquery
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?


