我使用此函数在交叉线程情况下更新RichTextBox
public void AddRtf(string text)
{
// cross thread allowed
if (rtb.InvokeRequired)
{
rtb.Invoke((MethodInvoker)delegate()
{
AddRtf(text);
});
}
else
{
rtb.Rtf = @"{\rtf1\ansi This is in \b bold\b0.}"; // this works
rtb.Rtf = @"{\rtf1\ansi This "+text+"is in \b bold\b0.}"; // this not
}
}
但是,无法正常工作,在传递"文本"时,我看不到RTF格式。参数。
会出现什么问题?
事实上,我需要一个简单的解决方案来更新RichTextBox,其中包含COLOR,BOLD,UNDERLINE和文本中的一些URL。我为其编写了一些函数,例如rtb.AddLink()。AddBold()等,包括一个很好的扩展用于添加URL,但似乎更合理地传递RTF格式并让控件更新格式。但是这将迫使我打破我需要BOLD或其他任何东西的每个点的文本。
我认为HTML会更方便,但我需要一个简单的解析器,至少比HTMLAgilitypack更简单。
如此简单的写一行:
log.write("<font color="red">This is error</font> and this is the link... etc")
任何人都有一个简单的解决方案吗?
答案 0 :(得分:2)
您需要在字符串的第二部分中转义\
:
@"{\rtf1\ansi This "+text+"is in \\b bold\\b0.}"
^^ ^^
或再次使用@
@"{\rtf1\ansi This "+text+@"is in \b bold\b0.}"
^