看了网上关于记事本的查找替换很多,但都没有达到我想要的结果,然后自己学习总结了以下的方法:
先上效果图
定义全局变量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#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 |
向上查找
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#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 |
向下查找
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
|
#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 |
替换 与 全部替换(功能不是很全)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
#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 |
消息弹窗
1
2
3
4
5
6
7
8
9
10
11
|
#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 |
查找字符着色
1
2
3
4
5
6
7
8
|
#region =★*★*★= 查找字符上色 =★*★*★= /// <summary> 查找字符上色 </summary> /// <param name="rtxt">RichTextBox</param> private static void myColor(RichTextBox rtxt) { rtxt.SelectionColor = Color.Coral; } #endregion |
以上都为个人的理解,有不全的地方请各位能指点迷津。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/ou832339/article/details/38846383