c#中richTextBox的用法

C# 同时被 2 个专栏收录
63 篇文章 0 订阅
43 篇文章 1 订阅

https://blog.csdn.net/yinbucheng/article/details/59560006?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158927609319725219917811%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=158927609319725219917811&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_v2~rank_v25-4-59560006.nonecase&utm_term=C%23+RichTextBox%E7%9A%84%E7%94%A8%E6%B3%95

RichTextBox是一种可用于显示、输入和操作格式文本,除了可以实现TextBox的所有功能,还能提供富文本的显示功能。 控件除具有TextBox 控件的所有功能外,还能设定文字颜色、字体和段落格式,支持字符串查找功能,支持rtf格式等功能。

下面就其的常用到的功能进行介绍。

一、显示滚动条

RichTextBox可设置Multiline属性来控制是否显示滚动套,true为是,false为否。,默认为true。(此项属性在TextBox亦可实现)

滚动条分为两种:水平(Horizontal)滚动条和垂直(Vertical)滚动条,通过RichTextBox的ScrollBars属性设置如何显示滚动条。(此项属性在TextBox亦可实现)

ScrollBars属性值:

1、Both:只有当文本超过RichTextBox的宽度或长度时,才显示水平滚动条或垂直滚动条,或两个滚动条都显示。

2、None:从不显示任何类型的滚动条。

3、Horizontal:只有当文本超过RichTextBox的宽度时,才显示水平滚动条。必须将WordWrap属性设置为false,才会出现这种情况。(下面将会给出解释)

4、Vertical:只有档文本超过RichTextBox的高度时,才显示垂直滚动条。

5、ForcedHorizontal:当WordWrap属性设置为false时,显示水平滚动条。在文本未超过RichTextBox的宽度时,该滚动条显示为浅灰色。

6、ForcedVertical:始终显示垂直滚动条。在文本未超过RichTextBox的长度时,该滚动条显示为浅灰色。

7、ForcedBoth:始终显示垂直滚动条。当WordWrap属性设置为false时,显示水平滚动条。在文本未超过RichTextBox的宽度或长度时,两个滚动条均显示为灰色。

 

 注:RichTextBox的WordWrap属性:用于指示多行文本框控件在必要时是否换行到下一行的开始。当属性为true时,不论ScrollBars属性值是什么,都不会显示水平滚动条。

下面通过几个截图加以描述其区别。(此项属性TextBox亦可实现)

(1)、当WordWrap为true,ScrollBars为Both时:

 

由此可见,WordWrap为true时,一旦文本超过RichTextBox的宽度时,就会自动换行到下一行,自然不需要用到水平滚动条,也就不显示出来了。

(2)、当WordWrap为false,ScrollBars为Both时:

 

由此可知,WordWrap为false时,即使文本超过RichTextBox的宽度,也不会自动换行到下一行,只有用户输入回车时才会换行,并且当文本超过RichTextBox的宽度后,才会显示水平滚动条。

代码实现过程:


    
  1. private void Form1_Load(object sender, EventArgs e) //窗体的Load事件
  2. {
  3.    richTextBox1.Multiline = true ; //将Multiline属性设置为true,实现显示多行
  4. richTextBox1.ScrollBars = RichTextBoxScrollBars.Vertical;  //设置ScrollBars属性实现只显示垂直滚动
  5. }

 

二、设置字体属性

 可通过RichTextBox的Font属性和ForeColor属性设置(Visual Studio2013社区版找不到SelectionFont和SelectionColor属性),也可通过代码实现,如文本字体设置为楷体,字体大小为12,字样是粗体,文本颜色为红色:


    
  1. private void Form1_Load(object sender, EventArgs e) //窗体的Load事件
  2. {
  3.   richTextBox1.Multiline = true ; //将Multiline属性设为true,实现显示多行
  4.   richTextBox1.ScrollBars = RichTextBoxScrollBars.Vertical; //设置ScrollBars属性实现只显示垂直滚动条
  5.   richTextBox1.SelectionFont = new Font ( "楷体", 12, FontStyle.Bold); //设置SelectionFont属性实现控件中的文本为楷体,大小为12,字样是粗体
  6.   richTextBox1.SelectionColor = System.Drawing.Color.Red; //设置SelectionColor属性实现控件中的文本颜色为红色
  7. }

将RichTextBox控件显示为超链接样式

将以“http://”开头的Web链接地址作为超链接文本时,运行时RichTextBox超链接文本会自动变成蓝色字体且有下划线。

此时点击超链接文本不会有任何响应,需要在RichTextBox的LinkClicked事件中编写代码实现。

 


    
  1. private void Form1_Load(object sender, EventArgs e) //窗体的Load事件
  2. {
  3.   richTextBox1.Multiline = true ; //将Multiline属性设为true,实现显示多行
  4.   richTextBox1.ScrollBars = RichTextBoxScrollBars.Vertical; //设置ScrollBars属性实现只显示垂直滚动条
  5.   richTextBox1.Text = "http://www.baidu.com百度一下你就知道"; //设置Text属性
  6. }
  7. private void richTextBox1_LinkClicked(object sender, EventArgs e)
  8. {
  9.   System.Diagnostics.Process.Start(e.LinkText); //在控件LinkClicked事件中编写如下代码实现内容中的网址单击后可以访问网址
  10. }

 

 

 

三、设置段落格式

可通过设置SelectionBullet属性将选定的段落设置为项目符号列表的格 式,也可以使用SelectionIndent属性和SelectionHangingIndent属性设置段落相对于控件的左右边缘进行缩进。下面用代 码将控件的SelectionBullet属性设置为true,使控件中的内容以项目符号列表的格式排列。


    
  1. private void Form1_Load(object sender, EventArgs e)
  2. {
  3.   richTextBox1.Multiline = true ;
  4. richTextBox1.ScrollBars = RichTextBoxScrollBars.Vertical ;
  5.   richTextBox1.SelectionBullet = true ;
  6. }

以下为属性SelectionBullet设为false和true时的差异(前者为false后者为true):

 

通过SelectionIndent属性设置一个整数,该整数表示控件的左边缘和文本的左边缘之间的距离(以像素为单位)。通过SelectionRightIndent属性设置一个整数,该整数表示控件的右边缘与文本的右边缘之间的距离(以像素为单位)。

以下通过代码实现SelectionIndent属性设置。

 


    
  1. private void Form1_Load(object sender, EventArgs e)
  2. {
  3.   richTextBox1.Multiline = true ;
  4.   richTextBox1.ScrollBars = RichTextBoxScrollBars.Vertical ;
  5.   richTextBox1.SelectionIndent = 50 ;
  6. }

 

差异如下组图:

 

SelectionRightIndent属性与SelectionIndent属性类似,可类比,当然也可以同时使用。

 

四、常用功能

1.RichTextBox控件的常用属性

1) SelectedText属性、SelectionLength属性、SelectionStart属性——与TextBox控件的属性功能相同。
2) SelectionFont:获取或设置选中的文本或插入点的字体,例如:
richTextBox1.SelectionFont=fontDialog1.Font; //设置为字体对话框中选中的字体 

    
3) SelectionColor:获取或设置选中的文本或插入点的文本颜色。
4) SelectionAlignment:获取或设置应用到当前选定内容或插入点的对齐方式。
5) Lines属性——字符串数组。记录输入到RichText控件中的所有文本,每按两次回车键之间的字符串是该数组的一个元素。
6) Modifyed属性——记录用户是否已修改控件中的文本内容。若已修改,该属性值自动设置为true。
7) HideSelection属性——设置当焦点离开该控件时,选定的文本是否保持突出显示。值为false时突出显示。

2.RichTextBox控件的常用事件

1)SelectionChange事件——控件中选中的文本发生改变时,触发该事件。 
2)TextChanged事件——控件中的文本内容发生改变时,触发该事件。

3.RichTextBox控件的常用方法

1)Clear( )方法——清除RichText控件中用户输入的所有内容。 
2)Copy( )、Cut( )、Paste( )方法——实现RichText控件的剪贴板功能;
3)SelectAll( )方法——选中控件中的所有文本。  4)Find( )方法——实现查找功能。
5)SaveFile( )方法、LoadFile( )方法——保存文本和打开文件。
6)Undo( )方法、Redo( )方法——撤销上一次编辑操作、重做上次撤销的编辑操作。  
说明:常与CanUndo属性和CanRedo属性配合使用。
7)LoadFile()——加载文本文件(*.txt)或RTF文件(*.rtf)。 
8)SaveFile()——保存文本文件(*.txt)或RTF文件(*.rtf)。


 4. 将文件加载到RichTextBox 对象中  

使用LoadFile( )方法.
(1)一般格式
RichTextBox对象名.LoadFile(文件名,文件类型);  
(2)说明
RichTextBox 控件可以显示纯文本、Unicode 纯文本或 RTF 格式文件。若要显示这些文件,可调用 LoadFile 方法。例如,使用打开文件对话框选择一个文本文件并加载到richTextBox1控件中,代码如下:  


    
  1. openFileDialog1.Filter= "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*";
  2. if(openFileDialog1.ShowDialog()==DialogResult.OK)
  3. {
  4. string fName=openFileDialog1.FileName;
  5. richTextBox1.LoadFile(fName,RichTextBoxStreamType.PlainText );
  6. }

RichTextBoxStreamType.PlainText为加载的文件类型,其他可选的枚举值如下:

5. 保存RichTextBox 对象中的文件

用SaveFile( )方法
(1)一般格式
RichTextBox对象名.SaveFile(文件名,文件类型);   
(2)使用说明
同LoadSave( )方法。

    
  1. //保存RTF格式文件
  2. saveFileDialog1.Filter= "RTF文件(*.rtf)|*.rtf"; saveFileDialog1.DefaultExt= "rtf";
  3. //默认的文件扩展名
  4. if(saveFileDialog1.ShowDialog()==DialogResult.OK)
  5. richTextBox1.SaveFile(saveFileDialog1.FileName,RichTextBoxStreamType.RichText );

6. 插入图片文件

可借助剪贴板实现.


    
  1. Clipboard.Clear(); //清空剪贴板
  2. Bitmap bmp = new Bitmap( @"d:\图片1.jpg"); //创建Bitmap类对象
  3. Clipboard.SetImage(bmp); //将Bitmap类对象写入剪贴板
  4. richTextBox1.Paste(); //将剪贴板中的对象粘贴到RichTextBox1

 

7. 其它补充内容

TextBox控件用到的所有属性、事件和方法,RichTextBox控件几乎都能支持,例如 MaxLength、MultiLine、ScrollBars、SelLength、SelStart 和 SelText。
注意:
TextBoxBase.Undo 方法不可用于 KeyPress 或 TextChanged 事件。
RichTextBox 控件没有TextBox控件一样具有64K字符容量的限制。 
RichTextBox 控件提供许多可对控件内任何文本部分应用格式设置的属性。若要更改文本的格式设置,必须首先选定此文本。只能为选定的文本分配字符和段落格式设置。对选定 的文本内容进行设置后,在选定内容后输入的所有文本也用相同的设置进行格式设置,直到更改设置或选定控件文档的不同部分为止。SelectionFont 属性使您得以将文本以粗体或斜体显示。还可以使用此属性更改文本的大小和字样。SelectionColor 属性使您得以更改文本的颜色。若要创建项目符号列表,可以使用 SelectionBullet 属性。还可以通过设置 SelectionIndent、SelectionRightIndent 和 SelectionHangingIndent 属性调整段落格式设置。

 

RichTextBox 控件提供具有打开和保存文件的功能的方法。
LoadFile 方法使您得以将现有的 RTF 或 ASCII 文本文件加载到控件中。还可以从已打开的数据流加载数据。SaveFile 使您得以将文件保存到 RTF 或 ASCII 文本中。与 LoadFile 方法相似,还可以使用 SaveFile 方法保存到开放式数据流。

 
Find 方法被重载,可以同时查找控件文本内的文本字符串以及特定字符。 
也可以将 RichTextBox 控件初始化为内存中存储的数据。例如,可以将 Rtf 属性初始化为包含要显示文本的字符串,包括确定如何设置该文本格式的 RTF 代码。 
可以使用 DetectUrls 属性适当地显示控件文本中的链接(如到网站的链接)。然后可以处理 LinkClicked 事件以执行与该链接关联的任务。 
SelectionProtected 属性使您得以保护控件内的文本不被用户操作。当控件中有受保护的文本时,可以处理 Protected 事件以确定用户何时曾试图修改受保护的文本,并提醒用户该文本是受保护的,或向用户提供标准方式供其操作受保护的文本。
 
 
 
例1
将 RTF 文件加载到控件中并搜索单词“Text”的第一个实例。然后代码更改选定文本的字体样式、字体大小和字体颜色并将更改保存到原始文件。
复制代码
public void CreateMyRichTextBox()
{
    RichTextBox richTextBox1 = new RichTextBox();
    richTextBox1.Dock = DockStyle.Fill;
richTextBox1.LoadFile(<span style="color:rgb(128,0,0);">"</span><span style="color:rgb(128,0,0);">C:\\MyDocument.rtf</span><span style="color:rgb(128,0,0);">"</span>);
richTextBox1.Find(<span style="color:rgb(128,0,0);">"</span><span style="color:rgb(128,0,0);">Text</span><span style="color:rgb(128,0,0);">"</span>, RichTextBoxFinds.MatchCase);

richTextBox1.SelectionFont = <span style="color:rgb(0,0,255);">new</span> Font(<span style="color:rgb(128,0,0);">"</span><span style="color:rgb(128,0,0);">Verdana</span><span style="color:rgb(128,0,0);">"</span>, <span style="color:rgb(128,0,128);">12</span>, FontStyle.Bold);
richTextBox1.SelectionColor = Color.Red;

richTextBox1.SaveFile(<span style="color:rgb(128,0,0);">"</span><span style="color:rgb(128,0,0);">C:\\MyDocument.rtf</span><span style="color:rgb(128,0,0);">"</span>, RichTextBoxStreamType.RichText);

<span style="color:rgb(0,0,255);">this</span>.Controls.Add(richTextBox1);

}

复制代码
部分文字属性的更改

 

例2

更加负载的多媒体类型的文字段落的录入。

复制代码
Demo

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Win_Test
{
public partial class RichTextBox_Test : Form
{
public RichTextBox_Test()
{
InitializeComponent();
}

    Font oldFont;
    Font newFont;

    <span style="color:rgb(0,128,0);">//</span><span style="color:rgb(0,128,0);">richTextBox1 所选文字加粗</span>
    <span style="color:rgb(0,0,255);">private</span> <span style="color:rgb(0,0,255);">void</span> button1_Click(<span style="color:rgb(0,0,255);">object</span> sender, EventArgs e)
    {

        oldFont = <span style="color:rgb(0,0,255);">this</span>.richTextBox1.SelectionFont;
        <span style="color:rgb(0,0,255);">if</span> (oldFont.Bold)
        { newFont = <span style="color:rgb(0,0,255);">new</span> Font(oldFont, oldFont.Style &amp; ~FontStyle.Bold); }
        <span style="color:rgb(0,0,255);">else</span>
            newFont = <span style="color:rgb(0,0,255);">new</span> Font(oldFont, oldFont.Style | FontStyle.Bold);

        <span style="color:rgb(0,0,255);">this</span>.richTextBox1.SelectionFont = newFont;
        <span style="color:rgb(0,0,255);">this</span>.richTextBox1.Focus();

    }

    <span style="color:rgb(0,128,0);">//</span><span style="color:rgb(0,128,0);">richTextBox1 所选文字加下划线</span>
    <span style="color:rgb(0,0,255);">private</span> <span style="color:rgb(0,0,255);">void</span> button2_Click(<span style="color:rgb(0,0,255);">object</span> sender, EventArgs e)
    {
        oldFont = <span style="color:rgb(0,0,255);">this</span>.richTextBox1.SelectionFont;
        <span style="color:rgb(0,0,255);">if</span> (oldFont.Underline)
        { newFont = <span style="color:rgb(0,0,255);">new</span> Font(oldFont, oldFont.Style &amp; ~FontStyle.Underline); }
        <span style="color:rgb(0,0,255);">else</span>
            newFont = <span style="color:rgb(0,0,255);">new</span> Font(oldFont, oldFont.Style | FontStyle.Underline);
        <span style="color:rgb(0,0,255);">this</span>.richTextBox1.SelectionFont = newFont;
        <span style="color:rgb(0,0,255);">this</span>.richTextBox1.Focus();


    }

    <span style="color:rgb(0,128,0);">//</span><span style="color:rgb(0,128,0);">richTextBox1 所选文字为斜体</span>
    <span style="color:rgb(0,0,255);">private</span> <span style="color:rgb(0,0,255);">void</span> button3_Click(<span style="color:rgb(0,0,255);">object</span> sender, EventArgs e)
    {
        oldFont = <span style="color:rgb(0,0,255);">this</span>.richTextBox1.SelectionFont;
        <span style="color:rgb(0,0,255);">if</span> (oldFont.Italic)
        { newFont = <span style="color:rgb(0,0,255);">new</span> Font(oldFont, oldFont.Style &amp; ~FontStyle.Italic); }
        <span style="color:rgb(0,0,255);">else</span>

            newFont = <span style="color:rgb(0,0,255);">new</span> Font(oldFont, oldFont.Style | FontStyle.Italic);
        <span style="color:rgb(0,0,255);">this</span>.richTextBox1.SelectionFont = newFont;
        <span style="color:rgb(0,0,255);">this</span>.richTextBox1.Focus();
    }

    <span style="color:rgb(0,128,0);">//</span><span style="color:rgb(0,128,0);">richTextBox1 所选文字居中</span>
    <span style="color:rgb(0,0,255);">private</span> <span style="color:rgb(0,0,255);">void</span> button4_Click(<span style="color:rgb(0,0,255);">object</span> sender, EventArgs e)
    {
        <span style="color:rgb(0,0,255);">if</span> (<span style="color:rgb(0,0,255);">this</span>.richTextBox1.SelectionAlignment == HorizontalAlignment.Center)
            <span style="color:rgb(0,0,255);">this</span>.richTextBox1.SelectionAlignment = HorizontalAlignment.Left;
        <span style="color:rgb(0,0,255);">else</span>
            <span style="color:rgb(0,0,255);">this</span>.richTextBox1.SelectionAlignment = HorizontalAlignment.Center;
        <span style="color:rgb(0,0,255);">this</span>.richTextBox1.Focus();
    }


    <span style="color:rgb(0,128,0);">//</span><span style="color:rgb(0,128,0);"> 在文本框输入字体大小</span>
    <span style="color:rgb(0,0,255);">private</span> <span style="color:rgb(0,0,255);">void</span> textBox1_KeyPress(<span style="color:rgb(0,0,255);">object</span> sender, KeyPressEventArgs e)
    {
        <span style="color:rgb(0,128,0);">//</span><span style="color:rgb(0,128,0);">remove all characters that are not numbers,backspace and enter</span>
        <span style="color:rgb(0,0,255);">if</span> ((e.KeyChar &lt; <span style="color:rgb(128,0,128);">48</span> || e.KeyChar &gt; <span style="color:rgb(128,0,128);">57</span>) &amp;&amp; e.KeyChar != <span style="color:rgb(128,0,128);">8</span> &amp;&amp; e.KeyChar != <span style="color:rgb(128,0,128);">13</span>)
        { e.Handled = <span style="color:rgb(0,0,255);">true</span>; }
        <span style="color:rgb(0,0,255);">else</span> <span style="color:rgb(0,0,255);">if</span> (e.KeyChar == <span style="color:rgb(128,0,128);">13</span>)
        {
            TextBox txt = (TextBox)sender;
            <span style="color:rgb(0,0,255);">if</span> (txt.Text.Length &gt; <span style="color:rgb(128,0,128);">0</span>)
                ApplyTextSize(txt.Text);
            e.Handled = <span style="color:rgb(0,0,255);">true</span>;
            <span style="color:rgb(0,0,255);">this</span>.richTextBox1.Focus();
        }
    }

    <span style="color:rgb(0,128,0);">//</span><span style="color:rgb(0,128,0);">根据textBox1的值设置richTextBox1的字体</span>
    <span style="color:rgb(0,0,255);">private</span> <span style="color:rgb(0,0,255);">void</span> ApplyTextSize(<span style="color:rgb(0,0,255);">string</span> textSize)
    {
        <span style="color:rgb(0,0,255);">float</span> newSize = Convert.ToSingle(textSize);
        FontFamily currentFontFamily;
        Font newFont;
        currentFontFamily = <span style="color:rgb(0,0,255);">this</span>.richTextBox1.SelectionFont.FontFamily;
        newFont = <span style="color:rgb(0,0,255);">new</span> Font(currentFontFamily, newSize);
        <span style="color:rgb(0,0,255);">this</span>.richTextBox1.SelectionFont = newFont;
    }

    <span style="color:rgb(0,128,0);">//</span><span style="color:rgb(0,128,0);">在textBox1控件验证时触发,设置richTextBox1的字体</span>
    <span style="color:rgb(0,0,255);">private</span> <span style="color:rgb(0,0,255);">void</span> textBox1_Validating(<span style="color:rgb(0,0,255);">object</span> sender, CancelEventArgs e)
    {
        TextBox txt = (TextBox)sender;
        ApplyTextSize(txt.Text);
        <span style="color:rgb(0,0,255);">this</span>.richTextBox1.Focus();
    }

    <span style="color:rgb(0,128,0);">//</span><span style="color:rgb(0,128,0);">让浏览器打开超链接地址</span>
    <span style="color:rgb(0,0,255);">private</span> <span style="color:rgb(0,0,255);">void</span> richTextBox1_LinkClicked(<span style="color:rgb(0,0,255);">object</span> sender, LinkClickedEventArgs e)
    {
        System.Diagnostics.Process.Start(e.LinkText);
    }

    <span style="color:rgb(0,128,0);">//</span><span style="color:rgb(0,128,0);">richTextBox1 加载 Test.rtf 文件</span>
    <span style="color:rgb(0,0,255);">private</span> <span style="color:rgb(0,0,255);">void</span> button5_Click(<span style="color:rgb(0,0,255);">object</span> sender, EventArgs e)
    {
        <span style="color:rgb(0,0,255);">try</span>
        {
            richTextBox1.LoadFile(<span style="color:rgb(128,0,0);">"</span><span style="color:rgb(128,0,0);">Test.rtf</span><span style="color:rgb(128,0,0);">"</span>);
        }
        <span style="color:rgb(0,0,255);">catch</span> (System.IO.FileNotFoundException)
        {
            MessageBox.Show(<span style="color:rgb(128,0,0);">"</span><span style="color:rgb(128,0,0);">No file to be load yet</span><span style="color:rgb(128,0,0);">"</span>);
        }
    }

    <span style="color:rgb(0,128,0);">//</span><span style="color:rgb(0,128,0);">richTextBox1 保存到 Test.rtf 文件</span>
    <span style="color:rgb(0,0,255);">private</span> <span style="color:rgb(0,0,255);">void</span> button6_Click(<span style="color:rgb(0,0,255);">object</span> sender, EventArgs e)
    {
        <span style="color:rgb(0,0,255);">try</span>
        {
            richTextBox1.SaveFile(<span style="color:rgb(128,0,0);">"</span><span style="color:rgb(128,0,0);">Test.rtf</span><span style="color:rgb(128,0,0);">"</span>);
        }
        <span style="color:rgb(0,0,255);">catch</span> (System.Exception err)
        {
            MessageBox.Show(err.Message);
        }
    }

}

}

复制代码
富文本,多类型的编码
 
 
  • 1
    点赞
  • 0
    评论
  • 8
    收藏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值