1.前言
最近給客戶做了一個(gè)協(xié)議解包與組包的工具,以便于他們給終端客戶或者集成商使用,讓客戶能夠快速集成產(chǎn)品協(xié)議,降低客戶集成工作量,產(chǎn)品協(xié)議是基于JT/T808,但是有增加了自己的一些特殊修改。
客戶使用的是C#開發(fā)的網(wǎng)關(guān),所以我就基于C#做了一個(gè)開發(fā)包以及測(cè)試工具,在做測(cè)試工具的時(shí)候有個(gè)富文本,對(duì)其指定內(nèi)容字體顏色進(jìn)行修改差點(diǎn)讓我陰溝里翻船,第一次是成功的,但是執(zhí)行第二次的時(shí)候全部文本都變色了。
實(shí)現(xiàn)的效果如下:上面是輸入的待解碼的16進(jìn)制字符串,左側(cè)是拆包說(shuō)明,右側(cè)是解析成JSON字符串。
?2.RichTextBox指定內(nèi)容變色
實(shí)現(xiàn)思路是這樣的,遍歷RichTextBox內(nèi)容,對(duì)每行通過(guò)“ --”進(jìn)行拆分,因?yàn)槲也鸢故镜母晃谋镜膬?nèi)容格式是:
消息體各個(gè)屬性? ? ?--此屬性的解釋
所以通過(guò)“ --”拆分成兩段,我需要對(duì)第一段內(nèi)容進(jìn)行顏色變化。
private void button1_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(richTextBox1.Text))
{
//此處是個(gè)坑,需要清理上次的內(nèi)容包含格式,否則再次執(zhí)行就會(huì)出現(xiàn)所有內(nèi)容都被變色處理了
richTextBox3.Clear();
//將數(shù)據(jù)包進(jìn)行拆分說(shuō)明,以此格式呈現(xiàn):xxxxxx --xxxxxx
richTextBox3.Text = SplitData(richTextBox1.Text).ToString();
//這里是將包解析成JSON字符串并輸出JSON格式,因?yàn)椴皇潜疚牡闹攸c(diǎn)所以就不過(guò)多說(shuō)明
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");
}
}
讓后對(duì)呈現(xiàn)拆包內(nèi)容的富文本增加一個(gè)TextChanged方法,可以看到對(duì)此方法的說(shuō)明:“在控件上更改Text屬性的值時(shí)引發(fā)的事件”。
然后對(duì)指定內(nèi)容進(jìn)行變色處理。
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)
{
//獲取每一行第一個(gè)字符的索引位置
int lineFirstCharIndex = richTextBox3.GetFirstCharIndexFromLine(i);
//選中需要變色的內(nèi)容的起點(diǎn)索引位置以及需要變色的內(nèi)容長(zhǎng)度(就是需要變色的文本的自身長(zhǎng)度)
richTextBox3.Select(lineFirstCharIndex, lineArr[0].Length);
//對(duì)其進(jìn)行變色,當(dāng)然也可以加上其他屬性,比如字體樣式改變等等,因?yàn)槲疫@里只需要變色即可
richTextBox3.SelectionColor = Color.Green;
}
}
}
?如果需要同時(shí)對(duì)字體的樣式進(jìn)行修改的話,可以在變色后面增加一行對(duì)字體樣式的修改,比如我此時(shí)設(shè)置對(duì)字體加粗:
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)
{
//獲取每一行第一個(gè)字符的索引位置
int lineFirstCharIndex = richTextBox3.GetFirstCharIndexFromLine(i);
//選中需要變色的內(nèi)容的起點(diǎn)索引位置以及需要變色的內(nèi)容長(zhǎng)度(就是需要變色的文本的自身長(zhǎng)度)
richTextBox3.Select(lineFirstCharIndex, lineArr[0].Length);
//對(duì)其進(jìn)行變色,當(dāng)然也可以加上其他屬性,比如字體樣式改變等等,因?yàn)槲疫@里只需要變色即可
richTextBox3.SelectionColor = Color.Green;
//對(duì)選中的字體進(jìn)行加粗處理
richTextBox3.SelectionFont = new Font(richTextBox3.Font.FontFamily, richTextBox3.Font.Size, FontStyle.Bold);
}
}
}
加粗后效果:
?3.結(jié)語(yǔ)
有對(duì)物聯(lián)網(wǎng)開發(fā)感興趣的小伙伴可以私信我,一起學(xué)習(xí)進(jìn)步,如果需要此解包工具的小伙伴也可以與我溝通(不收費(fèi),但是并非嚴(yán)格的808協(xié)議,是客戶產(chǎn)品基于808做的一個(gè)變種協(xié)議,大分部?jī)?nèi)容還是按808做的)
工具截圖:
終端上線數(shù)據(jù)解包:
?平臺(tái)下行數(shù)據(jù)組包:
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-413830.html
工具地址:https://download.csdn.net/download/qq_17486399/87303356文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-413830.html
到了這里,關(guān)于C#修改富文本框(RichTextBox)指定內(nèi)容顏色的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!