使用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

你可能感兴趣的:(html,.net,Google,asp.net,asp)