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

本文关键字:文本 颜色 RichTextbox 设置 编程 方式 | 更新日期: 2023-09-27 18:01:32

我正在使用这个答案以编程方式添加彩色线条到我的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作为参数也可以。

有人能给我解释一下吗?我猜这与如何通过引用/值传递事物有关,但我不明白。

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

RichTextBox.Text属性是普通的未格式化文本。

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

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

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