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选择和选择颜色不起作用

您的错误是直接将消息文本添加到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 中的文本上正确应用背景色