C# RichTextBox-使用多种颜色将文本添加到顶部(仅显示最新的一行)
我正在尝试复制一个日志窗口,因此最新的日志应该出现在最可见的顶部。因此,我需要在顶部添加一个文本(没问题),但有多种颜色(问题) 首先,我存储原始文本。(它是rtf或文本-尝试两者) 然后我添加新的文本,包括用户名和消息。用户名应该是一种颜色,消息应该是另一种颜色。它也总是单线的 通过我的方法,我得到的只是当附加旧文本或旧RTF文本时,只显示最新的“日志”C# RichTextBox-使用多种颜色将文本添加到顶部(仅显示最新的一行),c#,logging,colors,richtextbox,C#,Logging,Colors,Richtextbox,我正在尝试复制一个日志窗口,因此最新的日志应该出现在最可见的顶部。因此,我需要在顶部添加一个文本(没问题),但有多种颜色(问题) 首先,我存储原始文本。(它是rtf或文本-尝试两者) 然后我添加新的文本,包括用户名和消息。用户名应该是一种颜色,消息应该是另一种颜色。它也总是单线的 通过我的方法,我得到的只是当附加旧文本或旧RTF文本时,只显示最新的“日志” public void AddLog(Log log) { try { string
public void AddLog(Log log)
{
try
{
string oldText = this.richTextBox1.Rtf;
this.richTextBox1.Text = log.User + ": " + log.Message + "\n";
this.richTextBox1.Select(0, log.User.Length);
this.richTextBox1.SelectionColor = Color.GreenYellow;
this.richTextBox1.Select(log.User.Length + 2, log.Message.Length);
this.richTextBox1.SelectionColor = Color.White;
this.richTextBox1.DeselectAll();
this.richTextBox1.Rtf += oldText;
}
catch { }
}
这可能吗?因为它不保存旧的RTF文本,并且旧的RTF文本不能附加在新文本之后,这意味着我可能必须在下面添加最新的文本,这不是我想要的
如果我不保存“RTF”文本,格式(颜色)将消失,只显示一种颜色。未测试,但请尝试此操作
public void AddLog(Log log)
{
try
{
richTextBox1.SelectAll();
string oldText = this.richTextBox1.SelectedRtf;
this.richTextBox1.Text = log.User + ": " + log.Message + "\n";
this.richTextBox1.Select(0, log.User.Length);
this.richTextBox1.SelectionColor = Color.GreenYellow;
this.richTextBox1.Select(log.User.Length + 2, log.Message.Length);
this.richTextBox1.SelectionColor = Color.White;
this.richTextBox1.DeselectAll();
this.richTextBox1.SelectionStart = this.richTextBox1.TextLength;
this.richTextBox1.SelectedRtf = oldText;
this.richTextBox1.DeselectAll();
}
catch { }
}
是的,我不知道先选择SelectedRtf文本或只是复制.Rtf文本(格式化文本),然后再添加它有什么区别。但这起作用了。所有其他尝试都在添加新文本后取消了文本格式,或者由于某种原因而变得怪异。我理解的是
Rtf
属性提供了完整的Rtf格式
,其中asSelectedRtf
提供了部分内容。我会这样说,与HTML相关Rtf
+Rtf
类似于SomeTagsMetags2
,其中插入SelectedRtf
只影响子集,因此sometags,sometags2
。因此,第一种格式会导致无效数据,而第二种格式则不是。:)