C# RichTextBox文本控件的用法

        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的宽度后,才会显示水平滚动条。

代码实现过程:

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

二、设置字体属性

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

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

​

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

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

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

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

三、设置段落格式

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

private void Form1_Load(object sender, EventArgs e)
{
  richTextBox1.Multiline = true ;   
    richTextBox1.ScrollBars = RichTextBoxScrollBars.Vertical ;
  richTextBox1.SelectionBullet = true ;
}

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

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

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

private void Form1_Load(object sender, EventArgs e)
{
  richTextBox1.Multiline = true ;
  richTextBox1.ScrollBars = RichTextBoxScrollBars.Vertical ;
  richTextBox1.SelectionIndent = 50 ;
}

差异如下组图:

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控件中,代码如下:

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

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

5. 保存RichTextBox 对象中的文件

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

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

6. 插入图片文件

        可借助剪贴板实现。

Clipboard.Clear();   //清空剪贴板
Bitmap bmp = new Bitmap(@"d:\图片1.jpg");  //创建Bitmap类对象
Clipboard.SetImage(bmp);  //将Bitmap类对象写入剪贴板
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("C:\\MyDocument.rtf");
    richTextBox1.Find("Text", RichTextBoxFinds.MatchCase);

    richTextBox1.SelectionFont = new Font("Verdana", 12, FontStyle.Bold);
    richTextBox1.SelectionColor = Color.Red;

    richTextBox1.SaveFile("C:\\MyDocument.rtf", RichTextBoxStreamType.RichText);

    this.Controls.Add(richTextBox1);
}
部分文字属性的更改

例2

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

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;

        //richTextBox1 所选文字加粗
        private void button1_Click(object sender, EventArgs e)
        {

            oldFont = this.richTextBox1.SelectionFont;
            if (oldFont.Bold)
            { newFont = new Font(oldFont, oldFont.Style & ~FontStyle.Bold); }
            else
                newFont = new Font(oldFont, oldFont.Style | FontStyle.Bold);

            this.richTextBox1.SelectionFont = newFont;
            this.richTextBox1.Focus();

        }

        //richTextBox1 所选文字加下划线
        private void button2_Click(object sender, EventArgs e)
        {
            oldFont = this.richTextBox1.SelectionFont;
            if (oldFont.Underline)
            { newFont = new Font(oldFont, oldFont.Style & ~FontStyle.Underline); }
            else
                newFont = new Font(oldFont, oldFont.Style | FontStyle.Underline);
            this.richTextBox1.SelectionFont = newFont;
            this.richTextBox1.Focus();


        }

        //richTextBox1 所选文字为斜体
        private void button3_Click(object sender, EventArgs e)
        {
            oldFont = this.richTextBox1.SelectionFont;
            if (oldFont.Italic)
            { newFont = new Font(oldFont, oldFont.Style & ~FontStyle.Italic); }
            else

                newFont = new Font(oldFont, oldFont.Style | FontStyle.Italic);
            this.richTextBox1.SelectionFont = newFont;
            this.richTextBox1.Focus();
        }

        //richTextBox1 所选文字居中
        private void button4_Click(object sender, EventArgs e)
        {
            if (this.richTextBox1.SelectionAlignment == HorizontalAlignment.Center)
                this.richTextBox1.SelectionAlignment = HorizontalAlignment.Left;
            else
                this.richTextBox1.SelectionAlignment = HorizontalAlignment.Center;
            this.richTextBox1.Focus();
        }


        // 在文本框输入字体大小
        private void textBox1_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)
            {
                TextBox txt = (TextBox)sender;
                if (txt.Text.Length > 0)
                    ApplyTextSize(txt.Text);
                e.Handled = true;
                this.richTextBox1.Focus();
            }
        }

        //根据textBox1的值设置richTextBox1的字体
        private void ApplyTextSize(string textSize)
        {
            float newSize = Convert.ToSingle(textSize);
            FontFamily currentFontFamily;
            Font newFont;
            currentFontFamily = this.richTextBox1.SelectionFont.FontFamily;
            newFont = new Font(currentFontFamily, newSize);
            this.richTextBox1.SelectionFont = newFont;
        }

        //在textBox1控件验证时触发,设置richTextBox1的字体
        private void textBox1_Validating(object sender, CancelEventArgs e)
        {
            TextBox txt = (TextBox)sender;
            ApplyTextSize(txt.Text);
            this.richTextBox1.Focus();
        }

        //让浏览器打开超链接地址
        private void richTextBox1_LinkClicked(object sender, LinkClickedEventArgs e)
        {
            System.Diagnostics.Process.Start(e.LinkText);
        }

        //richTextBox1 加载 Test.rtf 文件
        private void button5_Click(object sender, EventArgs e)
        {
            try
            {
                richTextBox1.LoadFile("Test.rtf");
            }
            catch (System.IO.FileNotFoundException)
            {
                MessageBox.Show("No file to be load yet");
            }
        }

        //richTextBox1 保存到 Test.rtf 文件
        private void button6_Click(object sender, EventArgs e)
        {
            try
            {
                richTextBox1.SaveFile("Test.rtf");
            }
            catch (System.Exception err)
            {
                MessageBox.Show(err.Message);
            }
        }

    }
}

  • 20
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本DataGridView打印控件和.NET打印控件5.5版(含报表模板设计组件)2014年2月8日修改完成,完全免费,在.NET2.0及以上环境下都可以使用(VB打印、C#打印都是可以的),有帮助文档与使用实例。 与上一版本的5.4版相比,新控件5.5版的主要更改如下: 1、对控件进行了完善,DGVPrint、VB2008Print、EasyReport组件的打印预览速度有较大的提升; 2、VB2008Print与EasyReport添加了二维码打印的功能,该功能使用开源的Zxing.NET实现; 3、添加了DrawDGVEx函数,一方面可以以DGVprint对象中的参数在VB2008Print组件中打印,另一方面提供了并排打印多个表格的重载函数; 4、DGVPrint组件添加了报表头与报表尾内容的设置属性和参数; 5、DGVPrint与VB2008Print组件在以工资条方式打印表格时,添加了是否自动换行续打的功能(即,如果工资条列太多在一行中打印不下时,可以指定自动换行续打); 6、修改了EasyReport组件的设计界面,每个区域的属性放在属性窗口中显示; 7、EasyReport组件添加了简单的多栏打印支持功能; 8、VB2008Print组件添加了PrintDGVFixedWidth函数,方便将DataGridView按指定宽度进行打印; 9、去掉了网页打印功能(因为在IE11下没法使用,所以干脆去掉),去掉了打印RDLC报表的功能; 10、其他一些完善,比如在导出Excel时,如果Columheader不可见,则不导出;解决了快速导出Excel时部分特殊列没有表格线问题(比如是数值列,但使用了%等格式);VB2008Print组件添加了PageScale可以指定打印时的缩放比例等等。 本控件特色: 1、强大的DataGridView打印功能,不仅可以以多种形式(普通打印、分栏打印、跨页打印、工资条打印)打印DGV表格,基本上能完全按DGV控件本身设置的格式如字体、字号、背景颜色、前景颜色、单元格对齐方式等打印出来,文字图像都可以打印,而且是完全根据表格当前的显示顺序进行打印的,基本上做到了所见即所得的打印。 2、报表设计功能。报表模板设计组件EasyReport与WebEasyReport组件可以设计普通报表、分组报表、套打模板等,分别以DataGridView为数据源。控件的位置以毫米为计量单位,定位准确,很适合套打单据设计。 3、强大的图表打印功能。5.2版控件新增了一个Chartlet的组件,使用非常方便,可以生成柱形图、饼图、折线图等多种图形,而且可以设置2D或3D效果,既可以在打印控件中打印出来,也可以在Graphics对象中显示。 4、分组汇总打印DataGridVeiw功能,每组还可以自动换新页打印,还可以自动增加行号。 5、强大的文本打印输出功能,控件提供多个文本打印重载函数,打印文本时,如果需要,控件会自动换行和换页打印输出。还增加了以指定行间距及字符间距打印文本的功能,可以用固定行距,也可以用单倍或多倍行距打印文本。 6、强大的绘图功能,基本上.NET的GDI+的绘图函数(如直线、矩形、路径、多边形、曲线等)都有,只有个别函数的名称有点区别。 7、支持同一文档多种版面格式打印(类似于Word中的节的功能):对同一份文档,不同的页面可以设置不同的格式(纸张大小、纸张方向、页边 距),只需要在新增一页时在NewPage方法中指定要使用的页面格式即可,使用非常简单。 8、报表文件保存功能。本控件允许将当前打印预览的内容保存为报表文件,以后使用本控件重新打开该报表文件即可重现原来保存报表时的打印内容。 9、Excel导出功能,可以将DataGridView和GridView导出为Excel文件,5.2版控件还增加了不依赖Office的导出Excel功能,而且速度非常快,5.4版还增加了合并单元格的导出功能。 10、打印DataGridView时的打印方案保存与读取功能。可以将当前打印参数保存为打印方案文件,或者从保存的打印方案文件中读取打印参数。 11、水印打印功能。根据需要,可以在页面中打印或不打印以半透明空心文字打印水印。 12、强大的容器控件打印功能(DrawPanel函数)。借助该函数,您只需要在您的容器控件中设计好要打印的内容及打印内容的相对位置,控件轻松帮你打印出来(如果超过一页,控件会自动换页续打)。 13、特殊文字效果打印功能。控件具有打印浮雕文字、阴影文字、空心文字、块文字的功能。 14、页眉页脚中既可打印文字,也可打印图像,或者即打印图像又打印输出文字。 15、图像与图标打印输出功能。 16、多表头(跨行跨列的复杂表头)打印功能,多表头组件支持多表头显示与打印、单元格内容的合并显示、打印与导出。 17、自定义纸张支持功能。 18、纸张背景图片设置打印功能。 19、.NET4.0支持功能(是单独的一个文件) 20、直接打印窗口中的TreeView控件功能 21、打印窗口中的ListView功能。 22、RichTextBox控件的RTF文本打印功能。 23、斜线表头打印功能(5.4版新增)。 24、二维码打印功能(5.5版本增加)。 我将持续改进该控件,并将不断推出控件的新版本,要查看或下载控件的升级版本,请登陆网站:http://myyouping.download.csdn.net/ 。具体使用方法请参见帮助文件与实例文件,如有疑问或好的建议,请与我联系: 邮箱:[email protected] Q Q:479781502

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值