簡體   English   中英

如何以編程方式設置RichTextbox文本和線條顏色?

[英]How to programatically set RichTextbox text and line color?

我正在使用此答案以編程方式向我的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.Text屬性是純格式的文本。

Text屬性不會返回有關應用於RichTextBox內容的格式的任何信息。 若要獲取富文本格式(RTF)代碼,請使用Rtf屬性。

因此,您應該嘗試改用.Rtf屬性:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM