服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#实现记事本查找与替换功能

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

2022-07-16 10:50茗香淡然 C#

这篇文章主要为大家详细介绍了C#实现记事本查找与替换功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

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

先上效果图

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

定义全局变量

?
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

延伸 · 阅读

精彩推荐
  • C#使用Nopcommerce为商城添加满XX减XX优惠券功能

    使用Nopcommerce为商城添加满XX减XX优惠券功能

    公司的电商网站要做个优惠券的功能,nop框架,但我接触nop时间不多,最后还是为了功能而完成了。这中间肯定有很多小问题。 ...

    C#教程网6942021-10-27
  • C#Untiy Shader实现纹理贴图滚动

    Untiy Shader实现纹理贴图滚动

    这篇文章主要为大家详细介绍了Untiy Shader实现纹理贴图滚动,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    fredshao11142022-07-09
  • C#C# 6.0 新特性汇总

    C# 6.0 新特性汇总

    这篇文章主要介绍了C# 6.0 新特性汇总的相关资料,本文给大家带来了11种新特征,非常不错,感兴趣的朋友一起看看吧...

    我打农村来4032021-12-07
  • C#C#比较日期的方法总结

    C#比较日期的方法总结

    在本篇内容中小编给大家整理了关于C#比较日期的方法和相关知识点,有需要的朋友们学习下。...

    C#教程网5272022-07-06
  • C#C# List实现行转列的通用方案

    C# List实现行转列的通用方案

    本篇通过行转列引出了System.Linq.Dynamic,并且介绍了过滤功能,具有很好的参考价值。下面跟着小编一起来看下吧...

    焰尾迭12262021-12-28
  • C#C#代码实现对AES加密解密

    C#代码实现对AES加密解密

    这篇文章主要介绍了C#代码实现对AES加密解密的相关资料,AES是一个新的可以用于保护电子数据的加密算法,需要的朋友可以参考下...

    C#教程网7222021-11-05
  • C#C#使用反射加载多个程序集的实现方法

    C#使用反射加载多个程序集的实现方法

    下面小编就为大家带来一篇C#使用反射加载多个程序集的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    C#教程网9322021-04-06
  • C#Unity通过UGUI的Slider调整物体颜色

    Unity通过UGUI的Slider调整物体颜色

    这篇文章主要为大家详细介绍了Unity通过UGUI的Slider调整物体颜色,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    这个世界会好吗6072022-03-11