好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C# RichTextBox制作文本编辑器

本文利用一个简单的小例子【文本编辑器】,讲解richtextbox的用法。

windows窗体中的richtextbox控件用于显示,输入和操作格式化的文本,richtextbox除了拥有textbox控件的所有功能外,还可以显示字体,颜色,链接,从文件中读取和加载图像,以及查找指定的字符。richtextbox控件通常用于提供类似字体处理程序(如microsoft word)的文本操作和显示功能。richtextbox控件可以显示滚动条,且默认根据需要进行显示。

涉及知识点:

selectionfont 获取或设置当前选定文本或插入点的字体。 fontstyle 指定应用到文本的字形信息。 selectionalignment  获取或设置应用到当前选定内容或插入点的对齐方式。 selectionindent 获取或设置所选内容开始行的缩进距离(以像素为单位)。 selectioncharoffset 获取或设置控件中的文本是显示在基线上、作为上标还是作为基线下方的下标。 selectioncolor 获取或设置当前选定文本或插入点的文本颜色。 selectionbackcolor   获取或设置在 system.windows.forms.richtextbox 控件中选中文本时文本的颜色。 selectionbullet 获取或设置一个值,通过该值指示项目符号样式是否应用到当前选定内容或插入点。 clipboard paste 粘贴指定剪贴板格式的剪贴板内容【插入图片时使用】。 find 在对搜索应用特定选项的情况下,在 system.windows.forms.richtextbox 控件的文本中搜索位于控件内特定位置的字符串。

效果图如下【以下设置文本对应的格式】:

核心代码如下

?

using system;

using system.collections.generic;

using system.drawing;

using system.drawing.printing;

using system.linq;

using system.text;

using system.threading.tasks;

using system.windows.forms;

 

namespace demorichtext.model

{

  public class defaultrickformat : baserichformat

  {

   public override void setformat(richtextbox rtbinfo)

   {

 

   }

  }

 

  /// <summary>

  /// 加粗格式

  /// </summary>

  public class boldrichformat : baserichformat

  {

   public override void setformat(richtextbox rtbinfo)

   {

    font oldfont = rtbinfo.selectionfont;

    font newfont;

    if (oldfont.bold)

    {

     newfont = new font(oldfont, oldfont.style & ~fontstyle.bold); //支持位于运算

    }

    else

    {

     newfont = new font(oldfont, oldfont.style | fontstyle.bold);

    }

    rtbinfo.selectionfont = newfont;

   }

  }

 

  /// <summary>

  /// 斜体

  /// </summary>

  public class italicrichformat : baserichformat

  {

   public override void setformat(richtextbox rtbinfo)

   {

    font oldfont = rtbinfo.selectionfont;

    font newfont;

    if (oldfont.italic)

    {

     newfont = new font(oldfont, oldfont.style & ~fontstyle.italic);

    }

    else

    {

     newfont = new font(oldfont, oldfont.style | fontstyle.italic);

    }

    rtbinfo.selectionfont = newfont;

    rtbinfo.focus();

   }

  }

 

  /// <summary>

  /// 下划线

  /// </summary>

  public class underlinerichformat : baserichformat

  {

   public override void setformat(richtextbox rtbinfo)

   {

    font oldfont = rtbinfo.selectionfont;

    font newfont;

    if (oldfont.underline)

    {

     newfont = new font(oldfont, oldfont.style & ~fontstyle.underline);

    }

    else

    {

     newfont = new font(oldfont, oldfont.style | fontstyle.underline);

    }

    rtbinfo.selectionfont = newfont;

    rtbinfo.focus();

   }

  }

 

  /// <summary>

  /// 删除线

  /// </summary>

  public class strikelinerichformat : baserichformat

  {

   public override void setformat(richtextbox rtbinfo)

   {

    font oldfont = rtbinfo.selectionfont;

    font newfont;

    if (oldfont.underline)

    {

     newfont = new font(oldfont, oldfont.style & ~fontstyle.strikeout);

    }

    else

    {

     newfont = new font(oldfont, oldfont.style | fontstyle.strikeout);

    }

    rtbinfo.selectionfont = newfont;

    rtbinfo.focus();

   }

  }

 

  /// <summary>

  /// 左对齐

  /// </summary>

  public class leftrichformat : baserichformat

  {

   public override void setformat(richtextbox rtbinfo)

   {

    rtbinfo.selectionalignment = horizontalalignment.left;

    rtbinfo.focus();

   }

  }

 

  /// <summary>

  /// 居中对齐

  /// </summary>

  public class centerrichformat : baserichformat

  {

   public override void setformat(richtextbox rtbinfo)

   {

    if (rtbinfo.selectionalignment == horizontalalignment.center)

    {

     rtbinfo.selectionalignment = horizontalalignment.left;

    }

    else

    {

     rtbinfo.selectionalignment = horizontalalignment.center;

    }

 

    rtbinfo.focus();

   }

  }

 

  /// <summary>

  /// 右对齐

  /// </summary>

  public class rightrichformat : baserichformat

  {

   public override void setformat(richtextbox rtbinfo)

   {

    if (rtbinfo.selectionalignment == horizontalalignment.right)

    {

     rtbinfo.selectionalignment = horizontalalignment.left;

    }

    else

    {

     rtbinfo.selectionalignment = horizontalalignment.right;

    }

 

    rtbinfo.focus();

   }

  }

 

  /// <summary>

  /// 缩进对齐

  /// </summary>

  public class indentrichformat : baserichformat

  {

   public override void setformat(richtextbox rtbinfo)

   {

    //每次以10个像素进行缩进

    rtbinfo.selectionindent = rtbinfo.selectionindent + 10;

    rtbinfo.focus();

   }

  }

 

  /// <summary>

  /// 缩进对齐

  /// </summary>

  public class outindentrichformat : baserichformat

  {

   public override void setformat(richtextbox rtbinfo)

   {

    //每次以10个像素进行缩进

    rtbinfo.selectionindent = rtbinfo.selectionindent - 10;

    rtbinfo.focus();

   }

  }

 

  /// <summary>

  /// 下标

  /// </summary>

  public class subscriptrichformat : baserichformat

  {

   public override void setformat(richtextbox rtbinfo)

   {

    if (rtbinfo.selectioncharoffset < 0)

    {

     rtbinfo.selectioncharoffset = 0;

    }

    else {

     rtbinfo.selectioncharoffset = -5;

    }

    rtbinfo.focus();

   }

  }

 

  /// <summary>

  /// 上标

  /// </summary>

  public class superscriptrichformat : baserichformat

  {

   public override void setformat(richtextbox rtbinfo)

   {

    if (rtbinfo.selectioncharoffset > 0)

    {

     rtbinfo.selectioncharoffset = 0;

    }

    else {

     rtbinfo.selectioncharoffset = 5;

    }

    rtbinfo.focus();

   }

  }

 

  /// <summary>

  /// 字体

  /// </summary>

  public class fontrichformat : baserichformat

  {

   public override void setformat(richtextbox rtbinfo)

   {

    fontdialog f = new fontdialog();

    if (f.showdialog() == dialogresult.ok)

    {

     fontfamily family = f.font.fontfamily;

     rtbinfo.selectionfont = new font(family, rtbinfo.selectionfont.size, rtbinfo.selectionfont.style);

    }

    rtbinfo.focus();

   }

  }

 

  /// <summary>

  /// 文本颜色

  /// </summary>

  public class forecolorrichformat : baserichformat

  {

   public override void setformat(richtextbox rtbinfo)

   {

    colordialog f = new colordialog();

    if (f.showdialog() == dialogresult.ok)

    {

 

     rtbinfo.selectioncolor = f.color;

    }

    rtbinfo.focus();

   }

  }

 

  /// <summary>

  /// 文本背景颜色

  /// </summary>

  public class bgcolorrichformat : baserichformat

  {

   public override void setformat(richtextbox rtbinfo)

   {

    colordialog f = new colordialog();

    if (f.showdialog() == dialogresult.ok)

    {

 

     rtbinfo.selectionbackcolor = f.color;

    }

    rtbinfo.focus();

   }

  }

 

  /// <summary>

  /// ul列表,项目符号样式

  /// </summary>

  public class ulrichformat : baserichformat

  {

   public override void setformat(richtextbox rtbinfo)

   {

    if (rtbinfo.selectionbullet)

    {

     rtbinfo.selectionbullet = false ;

    }

    else {

     rtbinfo.selectionbullet = true ;

     rtbinfo.bulletindent = 10;

    }

    rtbinfo.focus();

   }

  }

 

  /// <summary>

  /// 图片插入

  /// </summary>

  public class picrichformat : baserichformat

  {

   public override void setformat(richtextbox rtbinfo)

   {

    openfiledialog o = new openfiledialog();

    o.initialdirectory = appdomain.currentdomain.basedirectory;

    o.title = "请选择图片" ;

    o.filter = "jpeg|*.jpeg|jpg|*.jpg|png|*.png|gif|*.gif" ;

    if (o.showdialog() == dialogresult.ok) {

     string filename = o.filename;

     try

     {

      image bmp = image.fromfile(filename);

      clipboard.setdataobject(bmp);

 

      dataformats.format dataformat = dataformats.getformat(dataformats.bitmap);

      if (rtbinfo.canpaste(dataformat))

      {

       rtbinfo.paste(dataformat);

      }

      

     }

     catch (exception exc)

     {

      messagebox.show( "图片插入失败。" + exc.message, "提示" ,

          messageboxbuttons.ok, messageboxicon.information);

     }

 

    }

    rtbinfo.focus();

   }

  }

 

  /// <summary>

  /// 删除

  /// </summary>

  public class delrichformat : baserichformat

  {

   public override void setformat(richtextbox rtbinfo)

   {

    rtbinfo.selectedtext = "" ;

    rtbinfo.focus();

   }

  }

 

  /// <summary>

  /// 查找

  /// </summary>

  public class searchrichformat : baserichformat

  {

   public override void setformat(richtextbox rtbinfo)

   {

    string find = rtbinfo.tag.tostring();

    int index= rtbinfo.find(find, 0,richtextboxfinds.none);

    int startpos = index;

    int nextindex = 0;

    while (nextindex != startpos) //循环查找字符串,并用蓝色加粗12号times new roman标记之

    {

     rtbinfo.selectionstart = index;

     rtbinfo.selectionlength = find.length;

     rtbinfo.selectioncolor = color.blue;

     rtbinfo.selectionfont = new font( "times new roman" , ( float )12, fontstyle.bold);

     rtbinfo.focus();

     nextindex = rtbinfo.find(find, index + find.length, richtextboxfinds.none);

     if (nextindex == -1) //若查到文件末尾,则充值nextindex为初始位置的值,使其达到初始位置,顺利结束循环,否则会有异常。

     {

      nextindex = startpos;

     }

     index = nextindex;

    }

    rtbinfo.focus();

   }

  }

 

  /// <summary>

  /// 打印

  /// </summary>

  public class printrichformat : baserichformat

  {

   private richtextbox richtextbox;

 

   public override void setformat(richtextbox rtbinfo)

   {

    this .richtextbox = rtbinfo;

    printdocument pd = new printdocument();

    pd.printpage += new printpageeventhandler(pd_printpage);

    // 打印文档

    pd.print();

   }

 

   private void pd_printpage( object sender, printpageeventargs ev)

   {

    //ev.graphics.drawstring(richtextbox.text);

    //ev.hasmorepages = true;

   }

  }

 

  /// <summary>

  /// 字体大小

  /// </summary>

  public class fontsizerichformat : baserichformat

  {

   public override void setformat(richtextbox rtbinfo)

   {

    string fontsize = rtbinfo.tag.tostring();

    float fsize = 0.0f;

    if ( float .tryparse(fontsize, out fsize)) {

     rtbinfo.selectionfont = new font(rtbinfo.font.fontfamily, fsize, rtbinfo.selectionfont.style);

    }

    rtbinfo.focus();

   }

  }

}

页面代码【由于实现了代码封装,所有页面代码较少】

?

using demorichtext.model;

using system;

using system.collections.generic;

using system测试数据ponentmodel;

using system.data;

using system.drawing;

using system.linq;

using system.text;

using system.threading.tasks;

using system.windows.forms;

 

namespace demorichtext

{

  public partial class mainform : form

  {

   public mainform()

   {

    initializecomponent();

   }

  

 

   public void btnbuttonclick( object sender, eventargs e) {

    button btn = (button)sender;

    btntype btntype;

    if ( enum .tryparse<btntype>(btn.tag.tostring(), out btntype)) {

     if (btntype == btntype.search) {

      if (! string .isnullorempty( this .txtsearch.text.trim()))

      {

       this .rtbinfo.tag = this .txtsearch.text.trim();

      }

      else {

       return ;

      }

     

     }

     irichformat richfomat = richformatfactory.createrichformat(btntype);

     richfomat.setformat( this .rtbinfo);

    }

   }

 

   private void combfontsize_selectedindexchanged( object sender, eventargs e)

   {

    float fsize = 12.0f;

    if (combfontsize.selectedindex > -1) {

     if ( float .tryparse(combfontsize.selecteditem.tostring(), out fsize)) {

      rtbinfo.tag = fsize.tostring();

      irichformat richfomat = richformatfactory.createrichformat(btntype.fontsize);

      richfomat.setformat( this .rtbinfo);

     }

     return ;

    }

   }

  }

}

richtextbox是一个功能丰富的控件,值得学习。

点击文末原文地址下载源码。

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

原文链接:http://HdhCmsTestcnblogs测试数据/hsiang/archive/2017/04/10/6691420.html

dy("nrwz");

查看更多关于C# RichTextBox制作文本编辑器的详细内容...

  阅读:59次