本文利用一个简单的小例子【文本编辑器】,讲解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 + ;
rtbInfo.Focus();
}
} /// <summary>
/// 缩进对齐
/// </summary>
public class OutIndentRichFormat : BaseRichFormat
{
public override void SetFormat(RichTextBox rtbInfo)
{
//每次以10个像素进行缩进
rtbInfo.SelectionIndent = rtbInfo.SelectionIndent - ;
rtbInfo.Focus();
}
} /// <summary>
/// 下标
/// </summary>
public class SubScriptRichFormat : BaseRichFormat
{
public override void SetFormat(RichTextBox rtbInfo)
{
if (rtbInfo.SelectionCharOffset < )
{
rtbInfo.SelectionCharOffset = ;
}
else {
rtbInfo.SelectionCharOffset = -;
}
rtbInfo.Focus();
}
} /// <summary>
/// 上标
/// </summary>
public class SuperScriptRichFormat : BaseRichFormat
{
public override void SetFormat(RichTextBox rtbInfo)
{
if (rtbInfo.SelectionCharOffset > )
{
rtbInfo.SelectionCharOffset = ;
}
else {
rtbInfo.SelectionCharOffset = ;
}
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 = ;
}
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, ,RichTextBoxFinds.None);
int startPos = index;
int nextIndex = ;
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), FontStyle.Bold);
rtbInfo.Focus();
nextIndex = rtbInfo.Find(find, index + find.Length, RichTextBoxFinds.None);
if (nextIndex == -)//若查到文件末尾,则充值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.ComponentModel;
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 > -) {
if (float.TryParse(combFontSize.SelectedItem.ToString(), out fsize)) {
rtbInfo.Tag = fsize.ToString();
IRichFormat richFomat = RichFormatFactory.CreateRichFormat(BTNType.FontSize);
richFomat.SetFormat(this.rtbInfo);
}
return;
}
}
}
}

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

源码下载链接

源码链接

C# RichTextBox 制作文本编辑器的更多相关文章

  1. ASP.NET MVC + 百度富文本编辑器 + EasyUi + EntityFrameWork 制作一个添加新闻功能

    本文将交大伙怎么集成ASP.NET MVC + 百度富文本编辑器 + EasyUi + EntityFrameWork来制作一个新闻系统 先上截图: 添加页面如下: 下面来看代码部分 列表页如下: @ ...

  2. wpf 富文本编辑器richtextbox的简单用法

    最近弄得一个小软件,需要用到富文本编辑器,richtextbox,一开始以为是和文本框一样的用法,但是实践起来碰壁之后才知道并不简单. richtextbox 类似于Word,是一个可编辑的控件.结构 ...

  3. html里文本编辑器如何制作呢?

    初入it职场,文本编辑器真的让人捉摸不透.最终在前端姐姐帮助下弄好了↓ 先在头部写好编辑器的各种功能的总体模型 <script>var editor; KindEditor.ready(f ...

  4. [前端随笔][JavaScript] 制作一个富文本编辑器

    写在前面 现在网上有很多现成的富文本编辑器,比如百度家的UEditor,kindeditor,niceditor等等,功能特别的多,API也很多,要去熟悉他的规则也很麻烦,所以想自己了解一下原理,做一 ...

  5. Bzoj1269 [AHOI2006]文本编辑器editor

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3678  Solved: 1380 Description 这些日子,可可不和卡卡一起玩了,原来可可正 ...

  6. 强大好用的"文本"编辑器

    1 editplugs 说明:EditPlus是一款由韩国 Sangil Kim (ES-Computing)出品的小巧但是功能强大的可处理文本.HTML和程序语言的Windows编辑器,你甚至可以通 ...

  7. 重构wangEditor(web富文本编辑器),欢迎指正!

    提示:最新版wangEditor请参见:wangEditor.github.io 或者 https://github.com/wangfupeng1988/wangEditor 1. 前言 (下载源码 ...

  8. 【BZOJ】1269: [AHOI2006]文本编辑器editor(Splay)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1269 这题RE2次啊,好不爽啊,我一直以为是splay的问题,其实是数组开小了......(我老犯这 ...

  9. editplus文本编辑器

    EditPlus中文破解版是一款功能强大的文本编辑器,拥有无限制的撤消与重做.英文拼字检查.自动换行.列数标记.搜寻取代.同时编辑多文件.全屏幕浏览功能.还有一个好用的功能,就是它有监视剪贴板的功能, ...

随机推荐

  1. axios的秘密

    vue自2.0开始,vue-resource不再作为官方推荐的ajax方案,转而推荐使用axios. 按照作者的原话来说: “Ajax 本身跟 Vue 并没有什么需要特别整合的地方,使用 fetch ...

  2. js自定义水印

    前言:今天在github上看到了一个定义水印的项目,因为获取的星星还蛮多,就多看了几眼,发现该项目简单有趣,心想以后可能会用的到,并且我下载到本地并亲自测试运行了一波.其实该项目最吸引我的是它定义js ...

  3. 为什么推荐前端使用Vue.js

    MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自 ...

  4. Spring Cloud微服务如何设计异常处理机制?

    导读 今天和大家聊一下在采用Spring Cloud进行微服务架构设计时,微服务之间调用时异常处理机制应该如何设计的问题.我们知道在进行微服务架构设计时,一个微服务一般来说不可避免地会同时面向内部和外 ...

  5. app测试之专项测试

    专项测试包含很多东西,安装.升级.卸载.性能.安全.网络.随机等等,这些都属于专项测试 一个app的正常到用户手里使用,功能是最基础的测试,专项测试测试主要的. 下面介绍一些常用的专项测试: 1.多任 ...

  6. Flume的各种类型的组件介绍

    1.   Source NetCat Source:绑定的端口(tcp.udp),将流经端口的每一个文本行数据作为Event输入: type:source的类型,必须是netcat. bind:要监听 ...

  7. Ocelot简易教程(三)之主要特性及路由详解

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9664977.html 上篇<Ocelot简易教程(二)之快速开始2>教大家如何快速跑起来一个 ...

  8. django在关闭debug后,admin界面 及静态文件无法加载的解决办法

    当debug为true的时候,ALLOWED_HOSTS是跳过不管用的.所以这里需要将debug关掉,令debug=false,ALLOWED_HOSTS=[ '*' ]表示所有的主机都可以访问 开启 ...

  9. 高性能Mysql笔记 — 优化

    性能优化 了解查询的整个生命周期,清楚每个阶段的时间消耗情况 性能分析 慢查询日志--服务器性能分析 参考 慢查询日志是优化很重要的手段,但是开启慢查询日志对性能的影响并不大,所以可以考虑在线上打开慢 ...

  10. Git介绍及常用操作演示(一)--技术流ken

    Git介绍 Git(读音为/gɪt/.)是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发 ...