C#修改富文本框(RichTextBox)指定内容颜色

1.前言

最近给客户做了一个协议解包与组包的工具,以便于他们给终端客户或者集成商使用,让客户能够快速集成产品协议,降低客户集成工作量,产品协议是基于JT/T808,但是有增加了自己的一些特殊修改。

客户使用的是C#开发的网关,所以我就基于C#做了一个开发包以及测试工具,在做测试工具的时候有个富文本,对其指定内容字体颜色进行修改差点让我阴沟里翻船,第一次是成功的,但是执行第二次的时候全部文本都变色了。

实现的效果如下:上面是输入的待解码的16进制字符串,左侧是拆包说明,右侧是解析成JSON字符串。

C#修改富文本框(RichTextBox)指定内容颜色_第1张图片

 2.RichTextBox指定内容变色

实现思路是这样的,遍历RichTextBox内容,对每行通过“ --”进行拆分,因为我拆包展示的富文本的内容格式是:

消息体各个属性     --此属性的解释

所以通过“ --”拆分成两段,我需要对第一段内容进行颜色变化。

private void button1_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(richTextBox1.Text))
            {
                //此处是个坑,需要清理上次的内容包含格式,否则再次执行就会出现所有内容都被变色处理了
                richTextBox3.Clear();
                //将数据包进行拆分说明,以此格式呈现:xxxxxx  --xxxxxx
                richTextBox3.Text = SplitData(richTextBox1.Text).ToString();
                //这里是将包解析成JSON字符串并输出JSON格式,因为不是本文的重点所以就不过多说明
                string strResult = DataParser.receiveData(richTextBox1.Text);
                if (string.IsNullOrEmpty(strResult))
                {
                    strResult = "Parsing exception, please check whether the data is normal, or contact the developer!";
                }
                richTextBox2.Text =CommonUtil.ConvertJsonString(strResult);
            }
            else
            {
                MessageBox.Show("Please enter the data to be parsed!", "Tips");
            }
        }

让后对呈现拆包内容的富文本增加一个TextChanged方法,可以看到对此方法的说明:“在控件上更改Text属性的值时引发的事件”。

C#修改富文本框(RichTextBox)指定内容颜色_第2张图片

然后对指定内容进行变色处理。

private void richTextBox3_TextChanged(object sender, EventArgs e)
        {
            for (int i = 0; i < richTextBox3.Lines.Length; i++)
            {
                string[] lineArr = richTextBox3.Lines[i].Split(new string[] { " --" }, StringSplitOptions.None);
                if (lineArr.Count() > 1)
                {
                    //获取每一行第一个字符的索引位置
                    int lineFirstCharIndex = richTextBox3.GetFirstCharIndexFromLine(i);
                    //选中需要变色的内容的起点索引位置以及需要变色的内容长度(就是需要变色的文本的自身长度)
                    richTextBox3.Select(lineFirstCharIndex, lineArr[0].Length);
                    //对其进行变色,当然也可以加上其他属性,比如字体样式改变等等,因为我这里只需要变色即可
                    richTextBox3.SelectionColor = Color.Green;
                }

            }
        }

 如果需要同时对字体的样式进行修改的话,可以在变色后面增加一行对字体样式的修改,比如我此时设置对字体加粗:

private void richTextBox3_TextChanged(object sender, EventArgs e)
        {
            for (int i = 0; i < richTextBox3.Lines.Length; i++)
            {
                string[] lineArr = richTextBox3.Lines[i].Split(new string[] { " --" }, StringSplitOptions.None);
                if (lineArr.Count() > 1)
                {
                    //获取每一行第一个字符的索引位置
                    int lineFirstCharIndex = richTextBox3.GetFirstCharIndexFromLine(i);
                    //选中需要变色的内容的起点索引位置以及需要变色的内容长度(就是需要变色的文本的自身长度)
                    richTextBox3.Select(lineFirstCharIndex, lineArr[0].Length);
                    //对其进行变色,当然也可以加上其他属性,比如字体样式改变等等,因为我这里只需要变色即可
                    richTextBox3.SelectionColor = Color.Green;
                    //对选中的字体进行加粗处理
                    richTextBox3.SelectionFont = new Font(richTextBox3.Font.FontFamily, richTextBox3.Font.Size, FontStyle.Bold);
                }

            }
        }

加粗后效果:

C#修改富文本框(RichTextBox)指定内容颜色_第3张图片

 3.结语

有对物联网开发感兴趣的小伙伴可以私信我,一起学习进步,如果需要此解包工具的小伙伴也可以与我沟通(不收费,但是并非严格的808协议,是客户产品基于808做的一个变种协议,大分部内容还是按808做的)

工具截图:

终端上线数据解包:

C#修改富文本框(RichTextBox)指定内容颜色_第4张图片

 平台下行数据组包:

C#修改富文本框(RichTextBox)指定内容颜色_第5张图片

工具地址:https://download.csdn.net/download/qq_17486399/87303356

你可能感兴趣的:(物联网,IOT套件笔记,C#,c#,开发语言,808,测试工具)