丰富颜色的文本框C#窗体

本文关键字:窗体 文本 颜色 | 更新日期: 2023-09-27 17:57:29

我有一个多线程应用程序,richtextbox是从另一个thread更新的,而不是在其上创建的:Form1所以我用了一个代理技巧:

delegate void SetTextCallback(string text);
    public static void SetText(String text)
    {
        if (Form1.myform.richtextbox.InvokeRequired)
        {
            SetTextCallback d = new SetTextCallback(SetText);
            Form1.myform.richtextbox.Invoke(d, new object[] { text });
        }
        else
        {
            Form1.myform.richtextbox.AppendText(text);
        }
    }

问题:如何给text上色?

丰富颜色的文本框C#窗体

在附加文本以进行选择后,必须在RichTextBox上使用Select方法(使用TextLenght查找要选择的范围)。然后可以使用SelectionColor属性来更改颜色。

当然,这应该在UI线程上完成。

public void SetText(string text, Color color)
{
    if (this.RichTextBox1.InvokeRequired) {
        SetTextCallBack d = new SetTextCallBack(SetText);
        this.Invoke(d, {
            text,
            color
        });
    } else {
        int length = this.RichTextBox1.TextLength;
        this.RichTextBox1.AppendText(text);
        this.RichTextBox1.Select(length, text.Length);
        this.RichTextBox1.SelectionColor = color;
    }
}

我用这些伪任务来测试它。

private void StartServer
{
    Task y = new Task(() => this.SetText("Yellow Text", Color.Yellow));
    Task z = new Task(() => this.SetText("Red Text", Color.Red));
    y.Start();
    z.Start();
}