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

news2024/11/19 2:40:49

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  --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属性的值时引发的事件”。

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

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.coloradmin.cn/o/95876.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库原理及MySQL应用 | 并发控制

无论何时,只要有多个查询需要在同一时刻修改数据,都会产生并发控制问题&#xff0c;MySQL通过多版本并发控制和加锁实现并发控制。 多用户并发执行事务访问同一个数据库时&#xff0c;可能引发脏写、脏读、不可重复读、幻读等一致性问题。并发事务访问相同记录的情况&#xff0…

Golang 【basic_leaming】数组

阅读目录Array(数组)数组定义数组的初始化方法一方法二方法三数组的遍历数组是值类型多维数组二维数组的定义二维数组的遍历数组练习题1、请求出一个数组的和以及平均值 for-range2、请求出一个数组的最大值&#xff0c;并得到对应的下标3、从数组 [1, 3, 5, 7, 8] 中找出和为 …

探花交友_第10章_搭建后台系统(新版)

探花交友_第10章_搭建后台系统&#xff08;新版&#xff09; 文章目录探花交友_第10章_搭建后台系统&#xff08;新版&#xff09;1.1 概述1.2 API网关1.2.1 搭建网关依赖引导类跨域问题配置类配置文件测试1.2.2 配置鉴权管理器1.3 Nacos配置中心1.3.1 添加依赖1.3.2 添加boots…

33.数据统计

数据统计 后台系统首页中&#xff0c;显示各种统计数据&#xff0c;比如&#xff1a;累计用户数、新增用户数、登录次数等内容。 解决方案 数据库表分析 一、数据采集 需求&#xff1a; 1、探花系统将用户操作日志写入RabbitMQ 2、管理后台获取最新消息&#xff0c;构造日…

SpringBoot+微信小程序实现的云音乐小程序系统 附带详细运行指导视频

文章目录一、项目演示二、项目介绍三、项目运行截图四、主要代码一、项目演示 项目演示地址&#xff1a; 视频地址 二、项目介绍 项目描述&#xff1a;这是一个基于SpringBoot微信小程序框架开发的云音乐微信小程序系统。首先&#xff0c;这是一个前后端分离的项目&#xff…

C语言百日刷题第十五天

前言 今天是刷题第15天&#xff0c;放弃不难&#xff0c;但坚持一定很酷~ 再刷一套模拟题 C语言百日刷题第十五天前言一、选择题二、判断题三、多选题四、填空题五、分析程序题一、选择题 1.下列选项中&#xff0c;不属于开发一个C语言应用程序的具体实现步骤的是&#xf…

为什么网络应用程序是今年的主要攻击媒介之一

网络犯罪分子在绕过最新的网络应用程序防火墙方面的独创性正在将互联网应用程序变成今年增长最快的攻击媒介。面向公众的 Web 应用程序现在是渗透组织边界的最广泛使用的攻击媒介。 根据卡巴斯基全球应急响应团队最近的一份报告&#xff0c;始于 Web 应用程序的攻击从 2020 年…

ocker高级篇1-dockeran安装mysql主从复制

大家好&#xff0c;咱们前面通过十篇的文章介绍了docker的基础篇&#xff0c;从本篇开始&#xff0c;咱们的《docker学习系列》将要进入到高级篇阶段(基础篇大家可以查看之前发布的文章)。 咱们先来介绍&#xff1a;docker复杂方式安装软件。通过按照mysql\redis两个案例来讲解…

XC6SLX100-3FGG484C规格、XC7A15T-2CPG236I产品概述及应用

Spartan-6系列提供领先的系统集成能力&#xff0c;为大批量应用提供最低的总成本。这个由13个成员组成的家族扩展了逻辑单元的密度&#xff0c;从3840个扩展到147443个&#xff0c;功耗仅为之前斯巴达家族的一半&#xff0c;并且具有更快、更全面的连接。 Spartan-6系列基于成熟…

拯救动画卡顿之FLIP

前置知识 什么是FPS FPS是浏览器的每秒的渲染帧数&#xff0c;也就是浏览器切换画面的次数&#xff0c;大多数设备的刷新率都是60FPS&#xff0c;一般来说FPS越低页面就会越卡顿。 什么是像素管道&#xff1f; 像素管道是浏览器单个帧的渲染流水线&#xff0c;如果其中有某…

vue数据双向绑定

5.Vue数据双向绑定 5.1.什么是双向数据绑定 Vue.js 是一个 MVVM 框架&#xff0c;即数据双向绑定&#xff0c;即当数据发生变化的时候&#xff0c;视图也就发生变化&#xff0c;当视图发生变化的时候&#xff0c;数据也会跟着同步变化。这也算是 Vue.js 的精髓之处了。 值得…

[ MessAuto ]: 短信验证码自动填充,理论支持所有浏览器或 APP, Only For Mac

MessAuto 开源地址&#xff1a;https://github.com/LeeeSe/MessAuto MessAuto 是一款 macOS 平台 自动提取 短信验证码并 粘贴回车 的软件&#xff0c;百分百由Rust开发&#xff0c;适用于任何APP。 特点&#xff1a; 轻量&#xff1a;程序占用存储 1.8 M&#xff0c;占用内…

NLP学习笔记(三) GRU基本介绍

大家好&#xff0c;我是半虹&#xff0c;这篇文章来讲门控循环单元 (Gated Recurrent Unit, GRU) 文章行文思路如下&#xff1a; 首先通过长短期记忆网络引出为什么需要门控循环单元然后介绍门控循环单元的核心思想与运作方式最后通过简洁的代码深入理解门控循环单元的运作方…

奇舞周刊 476 期:代码在内存中的 “形状”

记得点击文章末尾的“ 阅读原文 ”查看哟~下面先一起看下本期周刊 摘要 吧~奇舞推荐■ ■ ■代码在内存中的 “形状”众所周知&#xff0c;js 的基本数据类型有 number、string、boolean、null、undefined 等。那么问题来了 typeof null 和 typeof undefined 分别是什么呢&…

[附源码]Node.js计算机毕业设计果蔬预约种植管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

[内网渗透]—NTLM网络认证及NTLM-Relay攻击

NTML网络认证 Windows认证分为本地认证和网络认证,当我们开机登录用户账户时,就需要将lsass.exe进程转换的明文密码hash与 sam文件进行比对,这种方式即为——本地认证 而当我们访问同一局域网的一台主机上的SMB共享时,需要提供凭证通过验证才能访问,这个过程就会设计win…

【C++】list 的模拟实现

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《吃透西嘎嘎》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;前言&…

Halcon条码和二维码质量评级

现在各行各业的人们都使用条码/二维码从生产阶段到销售点全程追踪他们 的产品。那么怎么验证生产出来的具有可读性&#xff0c;码的质量等级如何呢&#xff1f; 其实ISO行业标准已经给出了如何评估码的质量等级的标准&#xff0c;以下三种主要验证标准用于确定一维条码、二维码…

毕业设计 - 基于Java EE平台项目管理系统的设计与实现【源码+论文】

文章目录前言一、项目设计1. 模块设计2. 实现效果二、部分源码项目工程前言 今天学长向大家分享一个 java web项目: 基于Java EE平台项目管理系统的设计与实现 一、项目设计 1. 模块设计 从管理员角度看: 用户登入系统后&#xff0c;可以修改管理员的密码。同时具有以下功能…

最全的SpringMVC教程,终于让我找到了

1. 为啥要学 SpringMVC&#xff1f; 1.1 SpringMVC 简介 在学习 SpringMVC 之前我们先看看在使用 Servlet 的时候我们是如何处理用户请求的&#xff1a; 配置web.xml <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmln…