丰富颜色的文本框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
上色?
在附加文本以进行选择后,必须在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();
}