如何以编程方式设置RichTextbox文本和线条颜色?

时间:2015-07-07 20:28:36

标签: c# .net winforms

我使用this answer以编程方式将彩色线条添加到我的RichTextBox文本中。

我的RichTextBoxExtensions类与该解决方案中的类完全相同。然后我有一个OutputMessage类:

class OutputMessage
{
    private string _message;
    private Color _color;

    public string Message { get { return _message; } }
    public Color Color { get { return _color; } }

    public OutputMessage(string message, CodeDeployer.enums.OutputTypes ot)
    {
        _message = message;

        switch (ot)
        {
            case enums.OutputTypes.Success:
                _color = Color.Green;
                break;
            case enums.OutputTypes.Error:
                _color= Color.Red;
                break;
            case enums.OutputTypes.Warning:
                _color= Color.DarkOrange; 
                break;
            default:
                _color = Color.Black;
                break;
        }
    }
}

在我的表单上,我保留了List<OutputMessage>,然后有一个方法会迭代List并尝试将内容放入我的表单上的RichTextBox

private void foo()
{
    this.txtOutput = GetOutput();
    this.txtOutput.Text = GetOutput().Text;
}

private RichTextBox GetOutput()
{
    RichTextBox results = new RichTextBox();

    foreach (OutputMessage om in output)
        results.AppendText(om.Message, om.Color);

    return results;
}

如果我使用第一行代码执行foo(),则txtOutput根本不会发生变化。它只是一个空的文本框。

如果我使用第二行代码执行foo()txtOutput 确实拥有List<OutputMessage>中的所有文字,但颜色会丢失。

如果我将GetOutput更改为直接与表单上的控件进行交互,则按预期工作。让它接受RichTextBox作为参数也可以。

有人可以向我解释一下吗?我猜测它与通过引用/价值传递的方式有关,但我不明白。

1 个答案:

答案 0 :(得分:2)

RichTextBox的{​​{3}}属性是明文无格式文本。

  

Text属性不会返回有关应用于RichTextBox内容的格式的任何信息。要获取富文本格式(RTF)代码,请使用Rtf属性。

所以你应该尝试使用.Text属性:

this.txtOutput.Rtf = GetOutput().Rtf;