RichTextBox选择和选择颜色不起作用
本文关键字:选择 不起作用 颜色 RichTextBox | 更新日期: 2023-09-27 18:20:51
我有一个方法,可以检测用户名,突出显示并更改其颜色,然后将其放入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;
}
}
结果是,我得到的所有文本都是红色的。有没有我做错了什么,或者它不起作用的原因?
您的错误是直接将消息文本添加到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 );
//..
我假设您想要突出显示所有用户名,而不仅仅是最后一个。在这种情况下,你需要使用背景/前景色来达到你想要的效果,而不要使用选择。基本上是使用textrange+apply属性的技巧。下面的链接应该有助于
如何在RichTextBox 中的文本上正确应用背景色