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

news/2024/9/23 9:45:19/

1.前言

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

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

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

 2.RichTextBox指定内容变色

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

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

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

private void button1_Click(object sender, EventArgs e){if (!string.IsNullOrEmpty(richTextBox1.Text)){//此处是个坑,需要清理上次的内容包含格式,否则再次执行就会出现所有内容都被变色处理了richTextBox3.Clear();//将数据包进行拆分说明,以此格式呈现:xxxxxx  --xxxxxxrichTextBox3.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属性的值时引发的事件”。

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

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);}}}

加粗后效果:

 3.结语

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

工具截图:

终端上线数据解包:

 平台下行数据组包:

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


http://www.ppmy.cn/news/4514.html

相关文章

2022年底,我手里一共负责了30套系统

2022年真是不平凡的一年&#xff0c;往常熙熙攘攘的办公室人越来越少&#xff0c;真是像曹操说的兄弟相继凋零&#xff0c;好似风中落叶啊。 结果人少了&#xff0c;手里的系统一个没少&#xff0c;慢慢年底了&#xff0c;我汇总了一下&#xff0c;手里的系统达到了30来个。 搞…

CSS实现文字扫光特效

上大学的玩 ae 的时候&#xff0c;就曾遇到过这个特效。偶然在百度看到了类似特效&#xff0c;没想到竟然能用 css 实现&#xff0c;所以就研究了一下&#xff0c;文字扫光效果如下&#xff1a; 实现思路&#xff1a; 光效移动效果&#xff0c;可以通过 background-image 设置…

设计模式4 - 行为型模式

23种设计模式分析与见解开篇、UML、软件设计原则https://blog.csdn.net/lili40342/article/details/128358435创建型模式https://blog.csdn.net/lili40342/article/details/128358392结构型模式https://blog.csdn.net/lili40342/article/details/128358313行为型模式https://bl…

基于粒子群优化算法的冷热电联供型综合能源系统运行优化(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

H5 WebSocket

1 /** 2 H5 Websocket 3 http请求只能客户端单方便向服务器请求发送数据 短连接 轮询又太浪费资源 4 websocket 实现全双通 长连接 用于前后端频繁交互的场景 5 6 其他特点包括: 7 (1)建立在 TCP 协…

Maven

一、maven介绍 传统web项目源码大小一般都有几十兆(包含jar)&#xff0c;如果项目中有使用到maven&#xff0c;那么项目只有几百k(只算源码)。 maven的优势&#xff1a; 1、依赖管理 就是对jar 包管理的过程。 2、项目的一键构建 (编译-----测试-----运行-----打包-----安装&…

基于FPGA的64点fft变换verilog开发

up目录 一、理论基础 二、核心程序 三、测试结果 一、理论基础 快速傅里叶变换 (fast Fourier transform), 即利用计算机计算离散傅里叶变换(DFT)的高效、快速计算方法的统称,简称FFT。快速傅里叶变换是1965年由J.W.库利和T.W.图基提出的。采用这种算法能使计算机计算离散…

C语言重点解剖关键字要点速记

1.在windows中&#xff0c;双击的本质是运行该程序&#xff0c;就是将程序(.exe)加载到内存当中去。任何程序在被运行之前都必须加载到内存当中去。 2.所有的变量本质都是在内存的某个位置开辟的。变量不能定义在硬盘上&#xff0c;因为变量必须在程序运行的时候才能被开辟&am…