合肥网站seo,wordpress 网页目录下,建站过程,wordpress数据文件在Windows应用程序开发中#xff0c;刚刚介绍了WPF版的利用RichTextBox实现文本编辑器#xff0c;今天继续推出WinForm版的利用RichTextBox实现文本编辑器。本文利用一个简单的小例子#xff0c;简述如何在WinForm开发中#xff0c;利用RichTextBox开发文本编辑器#xff…在Windows应用程序开发中刚刚介绍了WPF版的利用RichTextBox实现文本编辑器今天继续推出WinForm版的利用RichTextBox实现文本编辑器。本文利用一个简单的小例子简述如何在WinForm开发中利用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 控件的文本中搜索位于控件内特定位置的字符串。 核心代码 1. 定义接口 为了规范和统一定义实现样式接口IRichFormat如下所示
namespace DemoRichText.Model
{/// summary/// 富文本框格式/// /summarypublic interface IRichFormat{void SetFormat(RichTextBox rtbInfo);}
} 2. 实现样式基类 定义一个接口的默认实现基类BaseRichFormat此基类是抽象类如下所示
namespace DemoRichText.Model
{public abstract class BaseRichFormat : IRichFormat{public abstract void SetFormat(RichTextBox rtbInfo);}
} 3. 具体实现方法 具体到每一个功能样式设置均继承自BaseRichFormat如下所示
namespace DemoRichText.Model
{public class DefaultRickFormat : BaseRichFormat{public override void SetFormat(RichTextBox rtbInfo){}}/// summary/// 加粗格式/// /summarypublic 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/// 斜体/// /summarypublic 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/// 下划线/// /summarypublic 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/// 删除线/// /summarypublic 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/// 左对齐/// /summarypublic class LeftRichFormat : BaseRichFormat{public override void SetFormat(RichTextBox rtbInfo){rtbInfo.SelectionAlignment HorizontalAlignment.Left;rtbInfo.Focus();}}/// summary/// 居中对齐/// /summarypublic 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/// 右对齐/// /summarypublic 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/// 缩进对齐/// /summarypublic class IndentRichFormat : BaseRichFormat{public override void SetFormat(RichTextBox rtbInfo){//每次以10个像素进行缩进rtbInfo.SelectionIndent rtbInfo.SelectionIndent 10;rtbInfo.Focus();}}/// summary/// 缩进对齐/// /summarypublic class OutIndentRichFormat : BaseRichFormat{public override void SetFormat(RichTextBox rtbInfo){//每次以10个像素进行缩进rtbInfo.SelectionIndent rtbInfo.SelectionIndent - 10;rtbInfo.Focus();}}/// summary/// 下标/// /summarypublic class SubScriptRichFormat : BaseRichFormat{public override void SetFormat(RichTextBox rtbInfo){if (rtbInfo.SelectionCharOffset 0){rtbInfo.SelectionCharOffset 0;}else {rtbInfo.SelectionCharOffset -5;}rtbInfo.Focus();}}/// summary/// 上标/// /summarypublic class SuperScriptRichFormat : BaseRichFormat{public override void SetFormat(RichTextBox rtbInfo){if (rtbInfo.SelectionCharOffset 0){rtbInfo.SelectionCharOffset 0;}else {rtbInfo.SelectionCharOffset 5;}rtbInfo.Focus();}}/// summary/// 字体/// /summarypublic 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/// 文本颜色/// /summarypublic 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/// 文本背景颜色/// /summarypublic 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列表,项目符号样式/// /summarypublic 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/// 图片插入/// /summarypublic 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/// 删除/// /summarypublic class DelRichFormat : BaseRichFormat{public override void SetFormat(RichTextBox rtbInfo){rtbInfo.SelectedText ;rtbInfo.Focus();}}/// summary/// 查找/// /summarypublic 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/// 打印/// /summarypublic 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/// 字体大小/// /summarypublic 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();}}
} 4. 实现工厂模式 因为所有实现都基于同一个接口所以进一步封装样式设置的实现类如下所示
namespace DemoRichText.Model
{public class RichFormatFactory{public static IRichFormat CreateRichFormat(BTNType btnType){IRichFormat richFormat;switch (btnType){case BTNType.Bold:richFormat new BoldRichFormat();break;case BTNType.BGColor:richFormat new BgColorRichFormat();break;case BTNType.Center:richFormat new CenterRichFormat();break;case BTNType.Del:richFormat new DelRichFormat();break;case BTNType.Font:richFormat new FontRichFormat();break;case BTNType.ForeColor:richFormat new ForeColorRichFormat();break;case BTNType.FontSize:richFormat new FontSizeRichFormat();break;case BTNType.Indent:richFormat new IndentRichFormat();break;case BTNType.Italic:richFormat new ItalicRichFormat();break;case BTNType.Left:richFormat new LeftRichFormat();break;case BTNType.OutIndent:richFormat new OutIndentRichFormat();break;case BTNType.Pic:richFormat new PicRichFormat();break;case BTNType.Print:richFormat new PrintRichFormat();break;case BTNType.Right:richFormat new RightRichFormat();break;case BTNType.Search:richFormat new SearchRichFormat();break;case BTNType.StrikeLine:richFormat new StrikeLineRichFormat();break;case BTNType.SubScript:richFormat new SubScriptRichFormat();break;case BTNType.SuperScript:richFormat new SuperScriptRichFormat();break;case BTNType.Ul:richFormat new UlRichFormat();break;case BTNType.UnderLine:richFormat new UnderLineRichFormat();break;default:richFormat new DefaultRickFormat();break;}return richFormat;}}
} 5. UI页面代码 由于实现了代码封装所有页面代码较少如下所示
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.TryParseBTNType(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;}}}
} 示例效果图 设置文本对应的格式具体如下所示 源码下载 关于源码下载可关注公众号并回复关键字WINRICH即可如下所示 以上就是【详解C#之WinForm版利用RichTextBox 制作文本编辑器】的全部内容关于更多详细内容可参考官方文档。希望能够一起学习共同进步。