使用RichTextBox的一点心得

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

        }  



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值