在将文本添加到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属性时,我得到了这个文本
Line1 \ nLine2 \ nLine3 \ nLine4
RichTextBox删除VS 2017中的转义字符,谁知道为什么?
答案 0 :(得分:5)
当您的应用程序以.NET 4.6.2(或更低版本)为目标时,RichTextBox将实例化RichEdit控件版本3(版本描述为here),当您的应用程序重新定位到.NET 4.7.1时,它会实例化Rich Edit版本4.1(msftedit.dll)。 RTF表示的差异很可能是由较新版本的控件引起的。即使您的应用程序以4.7及更高版本为目标,也可以选择退出使用较新版本的Rich Edit,方法是在AppContextSwitchOverrides标记下添加app.config文件和以下兼容性开关:
<?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>
&#13;
相反,您可以通过将上面的AppContextSwitch设置为false来在面向.NET 4.6.2的应用程序中加载Rich Edit 4.1。
希望这有帮助,Tanya