C#中richtextbox使用方法详解
C#中RichTextBox使用方法和TextBox基本一样,只不过RichText除了TXT外,还支持RTF格式的文档。本文详细介绍RichTextBox的使用方法供大家参考,具体如下:
一、RichTextBox的使用方法
RichTextBox.Find方法
RichTextBox控件不仅允许输入和编辑文本,同时还提供了标准TextBox控件未具有的、更高级的指定格式的许多功能。
语法:RichTextBox
说明:
RichTextBox提供了一些属性,对于本控件文本的任何部分,用这些属性都可以指定格式。为了改变文本的格式,首先要选定它。只有选定的文本才能赋予字符和段落格式。使用这些属性,可把文本改为粗体或斜体,或改变其颜色,以及创建上标和下标。通过设置左右缩进和悬挂式缩进,可调整段落的格式。
RichTextBox控件能以rtf格式和普通ASCII文本格式这两种形式打开和保存文件。可以使用控件的方法(LoadFile和SaveFile)直接读写文件,或使用与VisualBasic文件输入/输出语句联结的、诸如SelRTF和TextRTF之类的控件属性打开和保存文件。
通过使用OLEObjects集合,RichTextBox控件支持对象的嵌入。插入到控件中的每个对象,都代表OLEObject对象。用这样的控件,就可以创建包含其它文档或对象的文档。例如,可创建这样的文档,它有一个嵌入的MicrosoftExcel电子数据表格、或MicrosoftWord文档、或其它已在系统中注册的OLE对象。为了把一个对象插入到RichTextBox控件中,只需简单地拖动一个文件(例如在Windows95“资源管理器”中的拖动),或拖动的是另一应用程序(如MicrosoftWord)所用文件的一个突出显示的区域,然后将所拖内容直接放入控件。
RichTextBox控件支持OLE对象的剪贴板和OLE拖/放操作。从剪贴板中粘贴进一个对象时,它被插在当前插入点处。一个对象被拖放到控件时,插入点将跟踪着鼠标光标的移动,直至鼠标按钮释放时该对象即被插入。这种行为和MicrosoftWord的一样。
使用SelPrint方法,可以打印RichTextBox控件的全部或部分文本。
因为RichTextBox是一个数据绑定控件,通过Data控件可以把它绑定到MicrosoftAccess数据库的Binary或Memo字段上,也可把它绑定到具有相同容量的其它数据库字段上(例如SQL服务器中的TEXT数据类型的字段)。
标准TextBox控件用到的所有属性、事件和方法,RichTextBox控件几乎都能支持,例如MaxLength、MultiLine、ScrollBars、SelLength、SelStart和SelText。对于那些可以使用TextBox控件的应用程序,也可以很容易地使用RichTextBox控件。而且,RichTextBox控件并没有和标准TextBox控件一样具有64K字符容量的限制。
发行注意为了能在应用程序中使用RichTextBox控件,必须把Richtx32.ocx文件添加到工程中。因此,在应用程序发行时,Richtx32.ocx文件就应安装在MicrosoftWindows的SYSTEM目录内。
二、RichTextBox实例代码:
privatevoid打开图形文件ToolStripMenuItem_Click(objectsender,EventArgse)
{
stringNameFile;
if(this.openFileDialog1.ShowDialog()==DialogResult.OK)
{
NameFile=this.openFileDialog1.FileName;
if(NameFile!="")
{
this.pictureBox1.Image=Image.FromFile(NameFile);
}
}
}
privatevoid打开文本文件ToolStripMenuItem_Click(objectsender,EventArgse)
{
stringFilename;
pictureBox1.Visible=false;
if(this.openFileDialog1.ShowDialog()==DialogResult.OK)
{
Filename=openFileDialog1.FileName;
if(Filename!="")
{
this.textBox1.Text=Filename;
this.richTextBox1.LoadFile(@Filename,RichTextBoxStreamType.PlainText);
}
}
}
//构造函数
this.textBox1.KeyPress+=newKeyPressEventHandler(textBox1_KeyPress);
this.textBox1.Validating+=newCancelEventHandler(textBox1_Validating);
this.richTextBox1.LinkClicked+=newLinkClickedEventHandler(richTextBox1_LinkClicked);
//取消或置为粗体
privatevoidbutton2_Click(objectsender,System.EventArgse)
{
FontoldFont=this.richTextBox1.SelectionFont;
FontnewFont;
if(oldFont.Bold)
newFont=newFont(oldFont,oldFont.Style&~FontStyle.Bold);
else
newFont=newFont(oldFont,oldFont.Style|FontStyle.Bold);
this.richTextBox1.SelectionFont=newFont;
this.richTextBox1.Focus();
}
//取消或置为斜体
privatevoidbutton7_Click(objectsender,System.EventArgse)
{
FontoldFont=this.richTextBox1.SelectionFont;
FontnewFont;
if(oldFont.Italic)
newFont=newFont(oldFont,oldFont.Style&~FontStyle.Italic);
else
newFont=newFont(oldFont,oldFont.Style|FontStyle.Italic);
this.richTextBox1.SelectionFont=newFont;
this.richTextBox1.Focus();
}
//取消或加上下划线
privatevoidbutton8_Click(objectsender,System.EventArgse)
{
FontoldFont=this.richTextBox1.SelectionFont;
FontnewFont;
if(oldFont.Underline)
newFont=newFont(oldFont,oldFont.Style&~FontStyle.Underline);
else
newFont=newFont(oldFont,oldFont.Style|FontStyle.Underline);
this.richTextBox1.SelectionFont=newFont;
this.richTextBox1
.Focus();
}
//取消或置为居中
privatevoidbutton5_Click(objectsender,System.EventArgse)
{
if(this.richTextBox1.SelectionAlignment==HorizontalAlignment.Center)
this.richTextBox1.SelectionAlignment=HorizontalAlignment.Left;
else
this.richTextBox1.SelectionAlignment=HorizontalAlignment.Center;
this.richTextBox1.Focus();
}
privatevoidtextBox1_KeyPress(objectsender,KeyPressEventArgse)
{
if((e.KeyChar<48||e.KeyChar>57)&&e.KeyChar!=8&&e.KeyChar!=13)
{
e.Handled=true;
}
elseif(e.KeyChar==13)
{
TextBoxtxt=(TextBox)sender;
if(txt.Text.Length>0)
ApplyTextSize(txt.Text);
e.Handled=true;
this.richTextBox1.Focus();
}
}
privatevoidtextBox1_Validating(objectsender,CancelEventArgse)
{
TextBoxtxt=(TextBox)sender;
ApplyTextSize(txt.Text);
this.richTextBox1.Focus();
}
//改变字体大小
privatevoidApplyTextSize(stringtextSize)
{
floatnewSize=Convert.ToSingle(textSize);
FontFamilycurrentFontFamily;
FontnewFont;
currentFontFamily=this.richTextBox1.SelectionFont.FontFamily;
newFont=newFont(currentFontFamily,newSize);
this.richTextBox1.SelectionFont=newFont;
}
//打开网页
privatevoidrichTextBox1_LinkClicked(objectsender,LinkClickedEventArgse)
{
System.Diagnostics.Process.Start(e.LinkText);
}
//打开文件
privatevoidbutton1_Click(objectsender,System.EventArgse)
{
try
{
this.richTextBox1.LoadFile(@"..\..\test.txt");
}
catch(System.IO.FileNotFoundException)
{
MessageBox.Show("Filenotfound!");
}
}
//保存文件
privatevoidbutton6_Click(objectsender,System.EventArgse)
{
try
{
this.richTextBox1.SaveFile(@"..\..\test.txt");
}
catch(System.Exceptionerr)
{
MessageBox.Show(err.Message);
}
}
三、在RichTextBox的内容内搜索文本:
1.重载列表:
在RichTextBox控件的文本中搜索字符列表中某个字符的第一个实例
publicintFind(char[]);
下面的示例在RichTextBox的内容中搜索在text参数中传递到方法的字符。如果在RichTextBox中找到了text数组的内容,则该方法返回所找到值的索引;否则,它将返回-1。该示例假定此方法位于Form的类中,该窗体包含一个名为richTextBox1的RichTextBox控件和一个连接到该示例中定义的单击事件处理方法的Button控件(名为button1)。
如下代码:
privatevoidbutton1_Click(objectsender,System.EventArgse)
{
MessageBox.Show(FindMyText(newchar[]{'D','e','l','t','a'}).ToString());
}
publicintFindMyText(char[]text)
{
//Initializethereturnvaluetofalsebydefault.
intreturnValue=-1;
//Ensurethatasearchstringhasbeenspecifiedandavalidstartpoint.
if(text.Length>0)
{
//Obtainthelocationofthefirstcharacterfoundinthecontrol
//thatmatchesanyofthecharactersinthechararray.
intindexToText=richTextBox1.Find(text);
//DeterminewhetherthetextwasfoundinrichTextBox1.
if(indexToText>=0)
{
//Returnthelocationofthecharacter.
returnValue=indexToText;
}
}
returnreturnValue;
}
2.在RichTextBox控件的文本中搜索字符串。
publicintFind(string);
从特定的起始点开始,在RichTextBox控件的文本中搜索字符列表中某个字符的第一个实例。
publicintFind(char[],int);
在对搜索应用特定选项的情况下,在RichTextBox控件的文本中搜索字符串。
publicintFind(string,RichTextBoxFinds);
下面的示例在RichTextBox的整个内容中搜索传递到此方法文本参数中的搜索字符串的第一个实例。如果在RichTextBox中找到搜索字符串,此方法将返回true值并突出显示文本;否则返回false。本示例还在搜索中指定匹配指定搜索字符串的大小写的选项。此示例假定此方法放置在Form的类中,并且该类包含一个名为richTextBox1的RichTextBox。
具体代码如下:
publicboolFindMyText(stringtext)
{
//Initializethereturnvaluetofalsebydefault.
boolreturnValue=false;
//Ensureasearchstringhasbeenspecified.
if(text.Length>0)
{
//ObtainthelocationofthesearchstringinrichTextBox1.
intindexToText=richTextBox1.Find(text,RichTextBoxFinds.MatchCase);
//DetermineifthetextwasfoundinrichTextBox1.
if(indexToText>=0)
{
returnValue=true;
}
}
returnreturnValue;
}
在RichTextBox控件的某个文本范围中搜索字符列表的某个字符的第一个实例。
publicintFind(char[],int,int);
在对搜索应用特定选项的情况下,在RichTextBox控件的文本中搜索位于控件内特定位置的字符串。
publicintFind(string,int,RichTextBoxFinds);
在对搜索应用特定选项的情况下,在RichTextBox控件文本中搜索控件内某个文本范围内的字符串。