如何在 C++CLI 中将简单的静态 RTF 添加到 .NET RichTextBox

How to add simple static RTF to a .NET RichTextBox in C++CLI

我在将一些基本的 RTF 文本添加到我的 .NET C++CLI Windows Forms 应用程序中的 RichTextBox object 时遇到问题。我需要做的就是用两个或三个 "paragraphs" 的静态文本填充我的 RTF 框,其中包含一些粗体文本、一些斜体文本和一些常规文本以及所有固定大小的 Arial 字体。

比如我只想要下面的

Header 1: Lorem ipsum pain sit amet, consectetur adipiscing elite, sed do eiusmod tempor incididunt ut labore et pain magna aliqua. 末尾有些斜体...

(空行)

Header 2: Lorem ipsum pain sit amet, consectetur adipiscing elite, sed do eiusmod tempor incididunt ut labore et pain magna aliqua.还有一些和最小的,谁想锻炼 ullamco

我四处寻找,找到了一些 VB.NET、ASP,甚至 C#(我通常可以将其翻译成 C++CLI)的东西,但我要么变得很奇怪 run-time 关于我的 RTF 的 "format" 的错误,或者所有内容都是粗体的 {} 符号以及其他奇怪的字符出现。

例如,我尝试了 myRichTextBox->Rtf = "{\rtf1\ansi\bHeader\b0: This is a test}" 但得到了 run-time "format" 错误。有些地方建议添加 @ 标记,但这至少在 C++CLI 中无法识别。

如果有人可以建议正确的方法来格式化字符串(或我可以传递到我的 RTF 框的 String^ str)以获得上面显示的 lorem ipsum,我将非常感激!只需要粗体、斜体、一种字体、一种大小、所有静态文本,没有任何编程。

谢谢。

你的字符串有问题,编译器没有像你想的那样解释它:

myRichTextBox->Rtf = "{\rtf1\ansi\bHeader\b0: This is a test}";

例如\r被解释为马车return。这就是为什么您看到了在 C# 中使用 @(逐字字符串)的建议:

// This is C# syntax
myRichTextBox.Rtf = @"{\rtf1\ansi\bHeader\b0: This is a test}";
myRichTextBox.Rtf = "{\rtf1\ansi\bHeader\b0: This is a test}";

这两行 C# 代码是等价的。 @ 告诉编译器忽略字符串中的所有转义符。

那么,您可以在 C++/CLI 中做什么?

嗯...要么简单地转义反斜杠:

myRichTextBox->Rtf = "{\rtf1\ansi\bHeader\b0: This is a test}";

或者,最好,您可以使用 C# 的逐字字符串的等价物:raw strings:

// foo is an optional delimiter
myRichTextBox->Rtf = LR"foo({\rtf1\ansi\bHeader\b0: This is a test})foo";