我有一个应用程序(在C#,.Net 2.0,VS 2010 SP1中开发),可以读取/写入串行端口,并将通信放在RichTextBox控件上。我被要求根据方向(无论是传入还是传出)对内容进行颜色编码,并标记有控制字符的位置(当它们显示消息中的哪个控制字符时类似于RealTerm)。因此,在存在控制字符的方法中,我添加<>标签。当我想使用上述方法中的字符串更新我的RTF时,我会寻找'<'和'>'并更改文本的颜色。但是,如果要添加的字符在标记之后为0x00或null,则当我调用RTB的.append方法时,fontcolor会切换到之前的状态,因此字符串之后的颜色与标记颜色相同。
我已经通过改变append方法后的颜色找到了解决这个问题的方法,但这对我来说似乎很好奇。我在本网站和MSDN上回顾了许多在线讨论/问题,但没有人解决这个问题并阅读了RichTextbox文档。我错过了一些明显的东西吗或者这只是另一个VS问题?
这是确定颜色并将字符附加到RTB的方法:
private void FormatAndAddText(string text_, bool isRx_)
{
RichTextBox.DeselectAll(); //If I dont call this method, If the user has selected the some text, the starred line will change the font color of the selection
Color mainTextColor = (isRx_ ? Color.LawnGreen : Color.Yellow);
Color tagsTextColor = (isRx_ ? Color.Red : Color.Blue);
RichTextBox.SelectionColor = mainTextColor; //****this will modify the color of the text, if user has selected some of it.
for(int i = 0; i< text_.Length; i++)
{
char char = text_[i];
if (_char == '<')
RichTextBox.SelectionColor = tagsTextColor ;
RichTextBox.AppendText(char.ToString()); //if char is 0x00, the color resets!!!
if ((i < text_.Length-1))
{
if (char == '>')
RichTextBox.SelectionColor = mainTextColor; //change the color to what it is supposed to be.
}
}
}