我有一个方法可以检测用户名,突出显示它并更改它的颜色,然后将其放在RichTextBox中:
private void displayMessage(string message, string color)
{
string username = message.Substring(0, message.IndexOf(':') - 1);
string realMessage = message.Replace(username , "");
serverChat.Text += message;
serverChat.Select(((serverChat.Text.Length - message.Length) - 1), username.Length - 1);
serverChat.SelectionColor = getColor(color);
serverChat.Text += Environment.NewLine;
}
private void sendButton_Click(object sender, EventArgs e)
{
displayMessage("PersonX: Hey is it working for you?", "1");
displayMessage("PersonY: Yeah, it just started. Thanks!", "0");
}
private Color getColor(string index)
{
switch (index)
{
case "0":
return Color.Red;
case "1":
return Color.Blue;
case "2":
return Color.Green;
case "3":
return Color.Yellow;
case "4":
return Color.Black;
default:
return Color.Black;
}
}
结果是我得到的所有文字都是红色。有什么我做错了或有什么理由不行吗?
答案 0 :(得分:1)
您的错误是将按摩文本添加到RichTextBox.Text中。这会使您之前完成的所有格式都松散或搞乱。
相反,您必须使用专门的函数AppendText
:
serverChat.AppendText(message);
和
serverChat.AppendText(Environment.NewLine);
这将保留以前的格式。
您的选择也有点偏。当您从一个空文本开始并且没有完全正确地获得用户名时,它会崩溃。试试这个:
string username = message.Substring(0, message.IndexOf(':') );
string realMessage = message.Replace(username , "");
serverChat.AppendText(message);
serverChat.Select(((serverChat.Text.Length - message.Length)), username.Length );
//..
答案 1 :(得分:0)
我假设您希望将所有用户名称设为突出显示,而不仅仅是最后一个。在这种情况下,您需要使用背景/前景色来实现您正在寻找的效果,而不是使用选择。基本上是使用textrange + apply属性的技巧。以下链接应该有帮助
How to properly apply backgroundcolor on a text in RichTextBox