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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C#实现简单记事本程序

    本文实例为大家分享了使用C#写出一个简单的记事本程序,供大家参考,具体内容如下 编程语言: C# 编程环境: Visual Studio 2013 运行环境: .NET Framework 4.5 预览: 功能: 标题栏 显示文件标题 菜单栏 各类菜单命令 文件- 新建 - 打开 - 保存 - 另存为 - 页面设置 - 打印 - 退出 编辑 - 撤销 - 剪切 - 复制 - 粘贴 - 全选 - 时间/日期 格式 - 自动换行 - 字体 视图 - 状态栏 - 工具栏 - 全屏模式 帮助 - 开源许

  • C#中#define后面只加一个参数的解释

    #define只加一个参数 的解释 <stdio.h> 里有: #ifndef __STDIO_H #define __STDIO_H 这个__STDIO_H代表什么?而define的用法不是后面加两个字符串吗,它这里却只加一个字符串,是什么意思? 还有很多头文件里都有如下语句 #if __STDC__ #define _Cdecl #else #define _Cdecl cdecl #endif __stdc__,cdecl代表什么? 比方说你#include进来一个stdio.h,再#i

  • 详解C#开发Android应用程序的流程

    手把手教你用C#开发Android应用程序的方法和流程摘要:用C#能开发RFID-android吗?C#真的能开发android程序吗?C#开发android程序的工具是什么?开发步骤.方法以及流程是怎样的?出学android开发者一定会提出这些疑问,本文一一解答这些疑问,为安卓初学者提供入门指引. Android系统一下子铺天盖地而来,让人目不暇接.兴奋的同时也让部分开发人员犯难了!要知道从熟知的Wince.Mobile开发语言C#跨越到RFID-Android的Java.可不是一朝一夕就能完

  • C#/.NET使用git命令行来操作git仓库的方法示例

    我们可以在命令行中操作 git,但是作为一名程序员,如果在大量重复的时候还手动敲命令行,那就太笨了. 本文介绍使用 C# 编写一个 .NET 程序来自动化地使用 git 命令行来操作 git 仓库. 这是一篇很基础的入门文章. 最简单的运行 git 命令的代码 在 .NET 中,运行一个命令只需要使用 Process.Start 开启一个子进程就好了.于是要运行一个 git 命令,我们其实只需要这句足以: Process.Start("git", "status")

  • C#实现简单文本编辑器

    本文实例为大家分享了C#实现简单文本编辑器的具体代码,供大家参考,具体内容如下 建立一个窗体文件,实现对文件的编辑保存和对txt文件的打开 界面设计: 程序源代码: //form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text;

  • C# 填充Excel图表、图例背景色的实例代码

    填充背景色,一般可以选择多种不同样式来填充背景,包括填充为纯色背景.渐变背景.图片背景或者纹理背景等.下面的内容将分别介绍通过C#来设置Excel中图表背景色.以及图表中的图例背景色的方法. 使用工具:Spire.XLS for .NET dll引用:下载安装后,注意在程序中添加引用Spire.Xls.dll(dll文件在安装路径下的bin文件夹中获取) [示例1]填充图表背景色 测试文档如下: Step1:加载文档 //实例化Workbook类的对象 Workbook workbook = n

  • C# WebApi Get请求方式传递实体参数的方法示例

    前言 我又搞回笃NET啦!java之路真是命运多舛,好事多磨.不过,也许我已经进入无招胜有招,博取众家之长.融会贯通的地步了. 对于WebApi,今天又有了一些新的了解. 话说,Get请求方式,参数会附在Url后面,称为QueryString,传递给服务器:而POST方式,则将参数放在消息体内.采用QueryString的话,简单,方便,但只适合参数比较少的情况:但有的时候,需要传递比较多.比较复杂的参数,比如,组合条件查询. 组合条件查询,条件会很多,通常会用一个实体类来封装,传递给服务器.用

  • C#用记事本编写简单WinForm窗体程序

    平时我们编写WinForm程序经常使用VS进行拖控件的方式,这样做虽然简单,但是无法深入了解WinForm程序的本质.其实,用记事本也可以编写出VS编写的WinForm程序.还是直接看代码吧: 1.打开记事本,写入以下代码,另存为hello.cs文件 using System; using System.Windows.Forms; namespace Hello { public class Form1:Form { private System.Windows.Forms.Button bt

  • C#读取Excel到DataTable的方法示例

    前提 在Windows下进行数据处理的时候最常见的情况莫过于读取Microsoft的Excel文件了,Excel的普及率惊人,是事实上的标准.以前的开发中我采用调用第三方类库 NPOI的方式来处理Excel.这个方式有两个缺点: 需要依赖第三方类库NPOI NPOI支持几乎全功能的Office条件,缺点就是复杂度也高. 如果只是简单的导入数据,完全可以有更加简单的方案,方案的限制条件为: 只支持Windows平台 只读取Excel文件 支持xls和xlsx文件格式 依赖 还是有依赖的 2007

  • 详解C#中的session用法

    Session具有以下特点: (1)Session中的数据保存在服务器端: (2)Session中可以保存任意类型的数据: (2)Session默认的生命周期是20分钟,可以手动设置更长或更短的时间. 需要注意的是在Session变量存储过多的数据会消耗比较多的服务器资源,在使用session时应该慎重 存入字符串: Session["userName"] = "aaa"; 这样取值: string str = Session["userName"

随机推荐