.NET RichTextBox控件使用详解


.NET RichTextBox控件使用详解
与常用的TextBox一样,RichTextBox控件派生于TextBoxBase。所以,它与TextBox共享许多功能,但许多功能是不同的。TextBox常用于从用户处获取短文本字符串,而RichTextBox用于显示和输入格式化的文本(例如,黑体、下划线和斜体)。它使用标准的格式化文本,称为Rich Text Format (富文本格式)或 RTF。


在上面的示例中,我们使用了标准的TextBox。也可以使用RichTextBox来完成该任务。实际上,如后面的示例所示,可以删除textBoxOutput 文本框,在它的位置上插入一个同名的RichTextBox,这个示例还会像以前那样运行。
RichTextBox控件的属性如果这种文本框比上一节介绍的文本框更高级,我们就会期望它有一些新属性。表15-11中列出了RichTextBox的一些常用属性。

表  15-11


名    称

描    述

CanRedo

如果上一个被撤销的操作可以使用Redo重复,这个属性就是true

CanUndo

如果可以在RichTextBox上撤销上一个操作,这个属性就是true,注意,CanUndo在TextBoxBase中定义,所以也可以用于TextBox控件

RedoActionName

这个属性包含通过Redo方法执行的操作名称

DetectUrls

把这个属性设置为true,可以使控件检测URL,并格式化它们(在浏览器中是带有下划线的部分)

Rtf

它对应于Text属性,但包含RTF格式的文本

SelectedRtf

使用这个属性可以获取或设置控件中被选中的RTF格式文本。如果把这些文本复制到另一个应用程序中,例如Word,该文本会保留所有的格式化信息

SelectedText

与SelectedRtf一样,可以使用这个属性获取或设置被选中的文本。但与该属性的RTF版本不同,所有的格式化信息都会丢失

SelectionAlignment

它表示选中文本的对齐方式,可以是Center, Left 或 Right

SelectionBullet

使用这个属性可以确定选中的文本是否格式化为项目符号的格式,或使用它插入或删除项目符号

BulletIndent

使用这个属性可以指定项目符号的缩进像素值

SelectionColor

这个属性可以修改选中文本的颜色

SelectionFont

这个属性可以修改选中文本的字体

SelectionLength

使用这个属性可以设置或获取选中文本的长度

SelectionType

这个属性包含了选中文本的信息。它可以确定是选择了一个或多个OLE对象,还是仅选择了文本

ShowSelectionMargin

如果把这个属性设置为true,在RichTextBox 的左边就会出现一个页边距,这将使用户更易于选择文本

UndoActionName

如果用户选择撤销某个动作,该属性将获取该动作的名称

SelectionProtected

把这个属性设置为true,可以指定不修改文本的某些部分



从上面的列表可以看出,大多数新属性都与选中的文本有关。这是因为在用户处理其文本时,对它们应用的任何格式化操作都是对用户选择出来的文本进行的。万一没有选择出文本,格式化操作就从光标所在的位置开始应用,该位置称为插入点。

RichTextBox控件的事件

RichTextBox使用的大多数事件与TextBox使用的事件相同,表15-12中有几个有趣的新事件。

表  15-12



名    称

描    述

LinkedClick

在用户单击文本中的链接时,引发该事件

Protected

在用户尝试修改已经标记为受保护的文本时,引发该事件

(续表)   

名    称

描    述

SelectionChanged

在选中文本发生变化时,引发该事件。如果因某些原因不希望用户修改选中的文本,就可以在该事件中禁止修改



在下面的示例中,将创建一个非常基本的文本编辑器。它说明了如何修改文本的基本格式,如何加载和保存RichTextBox中的文本。为了简单起见,这个示例被加载和保存到固定的文件中。


RichTextBox示例


与往常一样,首先设计窗体:

(1) 在C:/BegVCSharp/Chapter15目录下创建一个新的C# Windows应用程序,命名为RichTextBoxTest。

(2) 创建窗体,如图15-14所示。文本框textSize应是一个TextBox控件。richTextBoxText文本框应是一个RichTextBox控件。

(3) 如图15-14所示命名控件。

(4) 除了文本框以外,把其他控件的Text属性设置为其控件名称(但表示该控件类型的部分不算)。

(5) 把textBoxSize文本框的Text属性改为10。

(6) 锚定控件,如表15-13所示。

表  15-13


控 件 名 称

Anchor值

buttonLoad 和 buttonSave

Bottom

RichTextBoxText

Top, Left, Bottom, Right

其他控件

Top



(7) 把窗体的MinimumSize属性值设置为Size属性的值。


示例的说明


前面是该示例的可见部分,下面添加代码。双击Bold按钮,在代码中添加Click事件处理程序。下面是该事件的代码:


C# Code:

private void buttonBold_Click(object sender, EventArgs e)

{
   
   Font oldFont;
   Font newFont;
   
   // Get the font that is being used in the selected text
   oldFont = this.richTextBoxText.SelectionFont;
   
   // If the font is using bold style now, we should remove the
   // Formatting  
   if (oldFont.Bold)
      newFont = new Font(oldFont, oldFont.Style & ~FontStyle.Bold);
   else
      newFont = new Font(oldFont, oldFont.Style | FontStyle.Bold);
   
   // Insert the new font and return focus to the RichTextBox
   this.richTextBoxText.SelectionFont = newFont;
   this.richTextBoxText.Focus();
}


首先获取当前选中文本使用的字体,并把它赋给一个局部变量。然后检查一下选中文本是否为黑体。如果是,就去除黑体设置;否则就设置黑体。使用oldFont作为原型,创建一个新字体,但根据需要添加或删除黑体格式。

最后,把新字体赋给选中的文本,把焦点返回给RichTextBox。Font对象详见第33章。

buttonItalic 和 buttonUnderline的事件处理程序的代码与上面的代码相同,但检查相关样式的代码不同。双击Italic 和 Underline两个按钮,添加下面的代码:


C# Code:

private void buttonItalic_Click(object sender, EventArgs e)
{
   Font oldFont;
   
   Font newFont;
   
   // Get the font that is being used in the selected text
   oldFont = this.richTextBoxText.SelectionFont;
   
   // If the font is using Italic style now, we should remove it
   if (oldFont.Italic)
      newFont = new Font(oldFont, oldFont.Style & ~FontStyle.Italic);
   else
      newFont = new Font(oldFont, oldFont.Style | FontStyle.Italic);
   
   // Insert the new font
   this.richTextBoxText.SelectionFont = newFont;
   this.richTextBoxText.Focus();
}

private void buttonUnderline_Click(object sender, System.EventArgs e)
{
   
   Font oldFont;
   Font newFont;
   
   // Get the font that is being used in the selected text
   oldFont = this.richTextBoxText.SelectionFont;
   
   // If the font is using Underline style now, we should remove it
   if (oldFont.Underline)
      newFont = new Font(oldFont, oldFont.Style & ~FontStyle.Underline);
   else
      newFont = new Font(oldFont, oldFont.Style | FontStyle.Underline);
   
   // Insert the new font
   this.richTextBoxText.SelectionFont = newFont;
   this.richTextBoxText.Focus();
}

//双击最后一个格式化按钮Center,添加下面的代码:
private void buttonCenter_Click(object sender, System.EventArgs e)
{
   if (this.richTextBoxText.SelectionAlignment == HorizontalAlignment.Center)
      this.richTextBoxText.SelectionAlignment = HorizontalAlignment.Left;
   else
      this.richTextBoxText.SelectionAlignment = HorizontalAlignment.Center;
   
   this.richTextBoxText.Focus();
}

//来源:C/S框架网(www.csframework.com) QQ:1980854898


这里必须检查一下另一个属性 SelectionAlignment,看看选中的文本是否已经居中对齐,因为我们希望按钮像一个开关那样运作。如果文本已居中,就使它左对齐,否则就使它居中。HorizontalAlignment是一个枚举,其值可以是Left、Right、Center、Justify和 NotSet。在本例中,只检查一下是否设置了Center,如果已经设置了,就把对齐方式设置为Left。如果不是,就设置为Center。


文本编辑器能进行的最后一个格式化操作是设置文本的大小。为文本框Size添加两个事件处理程序,一个处理程序控制输入,另一个处理程序检测用户输入完一个值的时间。

在Properties窗口的Events列表中找到并双击textBoxSize 控件的KeyPress和Validated事件,给处理程序添加代码。

与前面示例使用的Validating不同,Validated事件在进行完验证后引发。这两个事件处理程序都使用一个帮助方法ApplyTextSize,该方法带有一个字符串参数,表示文本的大小:


C# Code:

private void textBoxSize_KeyPress(object sender, KeyPressEventArgs e)
{
   // Remove all characters that are not numbers, backspace and enter.
   if ((e.KeyChar < 48 || e.KeyChar > 57) && (e.KeyChar != 8 && e.KeyChar != 13))
   {    
      e.Handled = true;     
   }  
   else if (e.KeyChar == 13)  
   {     
      // Apply size if the user hits enter     
      TextBox txt = (TextBox)sender;
      
      if (txt.Text.Length > 0)   
        ApplyTextSize(txt.Text);
      
      e.Handled = true;     
      this.richTextBoxText.Focus();     
   }  
}

private void textBoxSize_Validated(object sender, CancelEventArgs e)
{
   TextBox txt = (TextBox)sender;
   ApplyTextSize(txt.Text);
   this.richTextBoxText.Focus();
}

private void ApplyTextSize(string textSize)
{
   
   // Convert the text to a float because we'll be needing a float shortly
   float newSize = Convert.ToSingle(textSize);
   
   FontFamily currentFontFamily;
   Font newFont;
   
   // Create a new font of the same family but with the new size
   currentFontFamily = this.richTextBoxText.SelectionFont.FontFamily;
   
   newFont = new Font(currentFontFamily, newSize);
   
   // Set the font of the selected text to the new font
   this.richTextBoxText.SelectionFont = newFont;
   
}


KeyPress事件只允许用户输入一个整数,并在用户按下回车键时,调用ApplyTextSize。我们感兴趣的是帮助方法ApplyTextSize。它首先把文本的大小从字符串转换为浮点数,我们只允许用户输入整数,但在创建新字体时,需要使用浮点数,所以把它转换为正确的数据类型。

之后,获取字体所属的字体系列,从该系列中创建一个带有新字号的新字体。最后,把选中文本的字体设置为新字体。

这就是我们所能进行的所有格式化操作,有一些操作可以由RichTextBox本身处理。如果现在尝试运行这个示例,就可以把文本设置为黑体、斜体和下划线,还可以居中文本。这就是我们期望的操作,但还有一些比较有趣的操作。试着在文本中键入一个网址,例如http:// www.wrox.com,该文本就被控件识别为一个Internet地址,加上下划线,当把鼠标指针移到该文本的上面时,鼠标指针就会变成手的形状。单击该文本,就会打开一个网页。我们需要处理用户单击链接时引发的事件:LinkClicked。

在Properties窗口的Events列表中找到LinkClicked事件,双击它,给事件处理程序中添加代码。我们以前没有见过这个事件处理程序。它用于提供单击链接的文本,处理程序非常简单,如下所示:


C# Code:

private void richTextBoxText_LinkedClick(object sender,
System.Windows.Forms.LinkClickedEventArgs e)
{
   System.Diagnostics.Process.Start(e.LinkText);
}


这段代码打开了默认的浏览器(如果浏览器没有打开),并导航到该链接指向的站点。

应用程序的编辑部分就完成了。剩下的是加载和保存控件的内容。这里使用一个固定的文件。双击Load按钮,添加下面的代码:


C# Code:

private void buttonLoad_Click(object sender, EventArgs e)
{
   // Load the file into the RichTextBox
   try
   {
      richTextBoxText.LoadFile("Test.rtf");
   }
   catch (System.IO.FileNotFoundException)
   {
      MessageBox.Show("No file to load yet");
   }
   
}




这就完成了,不需要做其他工作。因为我们处理的是文件,所以总是有可能遇到异常,必须处理这些异常。在Load方法中,处理了因文件不存在而抛出的异常。保存文件也是这样,双击Save按钮,添加下面的代码:


C# Code:

private void buttonSave_Click(object sender, EventArgs e)
{
   // Save the text
   try
   {
      richTextBoxText.SaveFile("Test.rtf");
   }
   catch (System.Exception err)
   {
      MessageBox.Show(err.Message);
   }
   
}




现在运行示例,格式化一些文本,再单击Save按钮。清空文本框,单击Load按钮,刚才保存的文本就会再次显示出来。




本文来源:
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
上一篇:《CS框架开发文档之开发框架与模块》.doc
下一篇:OpenFileDialog Filter属性设置所有图片格式
评论列表

发表评论

评论内容
昵称:
关联文章

.NET RichTextBox使用详解
(C#)RichTextBox查找文本演示(功能全)
使用FastReport打印RichTextBox RTF 格式的报表
详解DevExpress.LookUpEdit实现自动搜索定位功能
C# Barcode条码使用方法
C# RichTextbox中插入图片
使用的第三方都有哪些?是否有版权问题?
C#.Net自定义 - GridPopupContainerLookup
C#.Net自定义 - GridPopupContainerEdit
界面是否全部使用dev的?还是也可以选择其它的库?
使用Scheduler实现生产进度监控程序
ExRichTextEdit 下载
C#.Net用户自定义制作教程
Winform界面布局太多没有出现滚动条XtraScrollableControl组使用
C#.Net 静态构造器使用详解
C# ImageListView下载(源代码)
ucWindowTitle用户 - 用户界面规范
JS日期
C#.Net自定义设置图标ToolboxBitmap的用法
VS.NET 窗体继承 - child不是此父级的子

热门标签
.NET5 .NET6 .NET7 APP Auth-软件授权注册系统 Axios B/S B/S开发框架 Bug Bug记录 C#加密解密 C#源码 C/S CHATGPT CMS系统 CodeGenerator CSFramework.DB CSFramework.EF CSFrameworkV1学习版 CSFrameworkV2标准版 CSFrameworkV3高级版 CSFrameworkV4企业版 CSFrameworkV5旗舰版 CSFrameworkV6.0 DAL数据访问层 Database datalock DbFramework Demo教学 Demo下载 DevExpress教程 DOM EF框架 Element-UI EntityFramework ERP ES6 Excel FastReport GIT HR IDatabase IIS JavaScript LINQ MES MiniFramework MIS NavBarControl Node.JS NPM OMS ORM PaaS POS Promise API Redis SAP SEO SQL SQLConnector TMS系统 Token令牌 VS2022 VSCode VUE WCF WebApi WebApi NETCore WebApi框架 WEB开发框架 Windows服务 Winform 开发框架 Winform 开发平台 WinFramework Workflow工作流 Workflow流程引擎 版本区别 报表 踩坑日记 操作手册 代码生成器 迭代开发记录 基础资料窗体 架构设计 角色权限 开发sce 开发技巧 开发教程 开发框架 开发平台 开发指南 客户案例 快速搭站系统 快速开发平台 秘钥 密钥 权限设计 软件报价 软件测试报告 软件简介 软件开发框架 软件开发平台 软件开发文档 软件体系架构 软件下载 软著证书 三层架构 设计模式 生成代码 实用小技巧 收钱音箱 数据锁 数据同步 微信小程序 未解决问题 文档下载 喜鹊ERP 喜鹊软件 系统对接 详细设计说明书 行政区域数据库 需求分析 疑难杂症 蝇量级框架 蝇量框架 用户管理 用户开发手册 用户控件 在线支付 纸箱ERP 智能语音收款机 自定义窗体 自定义组件 自动升级程序