在将文本添加到 RichTextBox 中的 RTF 属性之前,我对文本进行了一些处理,添加转义字符,然后将数据分成多行。
正文是
line1 \n\u001aline2 \n\u001aline3 \n\u001aline4
当我将 VS 2015 与 .Net 4.6.2 一起使用时 RTF 属性中的值为
{\\rtf1\\fbidis\\ansi\\deff0{\\fonttbl{\\f0\\fnil\\fcharset0
Arial;}}\r\n\\viewkind4\\uc1\\pard\\ltrpar\\lang3073\\fs24 Line1
\\par\r\n\\v\\'1a\\v0 Line2
\\par\r\n\\v\\'1a\\v0 Line3
\\par\r\n\\v\\'1a\\v0 Line4\\par\r\n}\r\n
但是当我使用 .Net 4.7.1 切换到 VS 2017 时 值更改为
{\\rtf1\\fbidis\\ansi\\deff0\\nouicompat{\\fonttbl{\\f0\\fnil\\fcharset0
Arial;}}\r\n{\\*\\generator Riched20 10.0.16299}\\viewkind4\\uc1
\r\n\\pard\\ltrpar\\fs24\\lang1033 Line1
\\par\r\n\\v\\'1a\\v0 Line2 \\par\r\n\\v\\'1a\\v0
Line3 \\par\r\n\r\n\\pard\\ltrpar\\v\\'1a\\v0
Line4\\par\r\n}\r\n
当我访问 Text 属性时,我得到了这个 Text
Line1 \nLine2 \nLine3 \nLine4
RichTextBox 删除了 VS 2017 中的转义字符,有人知道为什么吗?
最佳答案
当您的应用程序以 .NET 4.6.2(或更低版本)为目标时,RichTextBox 实例化 RichEdit 控件版本 3(版本描述 here),当您的应用程序重定向到 .NET 4.7.1 时,它实例化 Rich Edit 版本 4.1( msftedit.dll)。 RTF 表示形式的差异很可能是由较新版本的控件引起的。即使您的应用程序以 4.7 及更高版本为目标,您也可以通过在 AppContextSwitchOverrides 标记下添加带有以下兼容性开关的 app.config 文件来选择不使用较新版本的 Rich Edit:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
</startup>
<runtime>
<AppContextSwitchOverrides
value="Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl=true" />
</runtime>
</configuration>
相反,您可以通过将上述 AppContextSwitch 设置为 false,在面向 .NET 4.6.2 的应用程序中加载 Rich Edit 4.1。
关于c# - RichTextBox 从文本中删除转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48371211/