RichTextBox选择和选择颜色不起作用

时间:2014-09-07 01:46:15

标签: c# colors richtextbox

我有一个方法可以检测用户名,突出显示它并更改它的颜色,然后将其放在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;
        }
    }

结果是我得到的所有文字都是红色。有什么我做错了或有什么理由不行吗?

2 个答案:

答案 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