我使用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
作为参数也可以。
有人可以向我解释一下吗?我猜测它与通过引用/价值传递的方式有关,但我不明白。
答案 0 :(得分:2)
RichTextBox
的{{3}}属性是明文无格式文本。
Text属性不会返回有关应用于RichTextBox内容的格式的任何信息。要获取富文本格式(RTF)代码,请使用Rtf属性。
所以你应该尝试使用.Text
属性:
this.txtOutput.Rtf = GetOutput().Rtf;