RichTextBox - 使用多种颜色添加文本到顶部(仅显示最新行)

时间:2013-09-03 21:37:26

标签: c# logging colors richtextbox

我正在尝试复制日志窗口,因此最新的日志应显示在顶部 - 最明显。因此,我需要在顶部添加一个文本(没问题)但有多种颜色(问题)。

首先我存储原始文本。 (这是rtf或文本 - 试过两者) 然后我添加新文本,用户名,然后是消息。用户名应该是一种颜色而消息应该是另一种颜色。它也总是单行的。

我通过我的方法获得的是,当附加旧文本或旧RTF文本时,最新的“日志”仅显示。

public void AddLog(Log log)
{
        try
        {
            string oldText = this.richTextBox1.Rtf;

            this.richTextBox1.Text = log.User + ": " + log.Message + "\n";
            this.richTextBox1.Select(0, log.User.Length);
            this.richTextBox1.SelectionColor = Color.GreenYellow;
            this.richTextBox1.Select(log.User.Length + 2, log.Message.Length);
            this.richTextBox1.SelectionColor = Color.White;
            this.richTextBox1.DeselectAll();
            this.richTextBox1.Rtf += oldText;

        }
        catch { }
}

这甚至可能吗?因为它不保存旧的RTF文本,并且旧的RTF文本无法在新文本后添加,这意味着我可能必须在下面添加不是我想要的最新文本。

如果我不是保存“RTF”文本,格式(颜色)将消失,只会显示一种颜色。

1 个答案:

答案 0 :(得分:2)

未经测试但请尝试此

public void AddLog(Log log)
{
    try
    {
        richTextBox1.SelectAll();            
        string oldText = this.richTextBox1.SelectedRtf;

        this.richTextBox1.Text = log.User + ": " + log.Message + "\n";
        this.richTextBox1.Select(0, log.User.Length);
        this.richTextBox1.SelectionColor = Color.GreenYellow;
        this.richTextBox1.Select(log.User.Length + 2, log.Message.Length);
        this.richTextBox1.SelectionColor = Color.White;
        this.richTextBox1.DeselectAll();
        this.richTextBox1.SelectionStart = this.richTextBox1.TextLength;
        this.richTextBox1.SelectedRtf = oldText;
        this.richTextBox1.DeselectAll();

    }
    catch { }
}