在将文本添加到 RichTextBox 中的 RTF 属性之前,我对文本进行了一些处理,添加转义字符,然后将数据划分为多行。
文字是
第 1 行 \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
第 1 行 \n第 2 行 \n第 3 行 \n第 4 行
RichTextBox 在 VS 2017 中删除了转义字符有人知道为什么吗?
当您的应用程序面向 .NET 4.6.2(或更低版本)时,RichTextBox 实例化 RichEdit 控件 version3(版本描述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。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)