使用RichTextBox的一点心得

最近开发一个控件,主要是对RichTextBox进行操作,实现对文本的编辑,包括加粗,下划线,改变字号,改变颜色等。最主要的是在光标位置插入带背景颜色的标签。
我的实现方式如下:
1. 新建一个控件类,让他继承RichTextBox类。
2. 文本的编辑
主要使用RichTextBox的Select、SelectionColor、SelectionFont来实现。其中文本颜色是调用ColorDialog组建来实现。
3.带背景颜色的标签。
插入这个标签,开始我还真没有想到好的解决方法,最后想起了RichTextBox是支持Rtf规范的。利用Rtf规范将文本格式化成一个string,然后将这个string付给RichTextBox的SelectedRtf属性,之后就算是好了。
Rtf有个关键之处:当你改变了一段文本后,在这段文本后面接着输入文字,后续的文字和前面的文字的格式是一样的。但是在我们的大多数应用中我们要求后面的文字是默认的格式,也就是黑字白底。在没有办法的时候我在我的标签后面加了一个用Rtf格式化的一个默认的空格。
我的代码如下:

private string textColor = @"\red0\green0\blue0;";//文字颜色-->黑
private string BgWhite = @"\red255\green255\blue255;";//背景颜色-->白
private string BgGray = @"\red180\green180\blue180;";//背景颜色-->灰

//插入文字
private string getTagRtf(string text, string textColor, string textBgColor)
{
StringBuilder rtfText = new StringBuilder();
rtfText.Append(@"{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052");//rtf头
rtfText.Append(@"{\fonttbl{\f0\fnil\fcharset134\''cb\''ce\''cc\''e5;}}");//字体
rtfText.Append(@"{\colortbl;");//定义颜色
rtfText.Append(textColor);//文字颜色
rtfText.Append(textBgColor);//文字背景颜色
rtfText.Append(@"}");
rtfText.Append(@"{\*\generator Msftedit 5.41.21.2500;}\viewkind4\uc1\pard\highlight2\b\lang2052\f0\fs18");//文本体
rtfText.Append(text);//要显示的文本。
rtfText.Append(@"}");//rtf结尾//\par
string rtfcode = rtfText.ToString();
return rtfcode;
}

//插入空格
private string getTextRtf(string textColor, string textBgColor)
{
StringBuilder rtfText = new StringBuilder();
rtfText.Append(@"{\rtf1\ansi\ansicpg1252\deff0\deflang1033\deflangfe2052");//rtf头
rtfText.Append(@"{\fonttbl{\f0\fnil\fcharset134\''cb\''ce\''cc\''e5;}}");//字体
rtfText.Append(@"{\colortbl;");//颜色
rtfText.Append(textColor);
rtfText.Append(textBgColor);
rtfText.Append(@"}");
rtfText.Append(@"\viewkind4\uc1\pard\highlight2\lang1033\fs18\~");//最后的\~在Rtf规范中表示一个空格
//rtfText.Append(string.Empty);//要显示的文本。
rtfText.Append(@"\pard}");//rtf结尾//\par
string rtfcode = rtfText.ToString();
return rtfcode;
}


关于Rtf格式规范,大家可以在google上搜索一下,有中文版的提供下载,也有很多人做了简单的解释,写下我的开发过程是给其他人做个参考,别再走弯路。

文章出处:http://www.diybl.com/course/4_webprogram/asp.net/netjs/20071226/93987.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值