RichTextBox从文本中删除转义字符

Had*_*lam 2 c# rtf richtextbox visual-studio-2017 .net-4.7.1

在将文本添加到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
Run Code Online (Sandbox Code Playgroud)

但是当我使用.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
Run Code Online (Sandbox Code Playgroud)

当我访问Text属性时,我得到了这个Text

Line1 \ nLine2 \ nLine3 \ nLine4

RichTextBox删除了VS 2017中的转义字符,谁知道为什么?

小智 6

当您的应用程序面向.NET 4.6.2(或更低版本)时,RichTextBox实例化RichEdit控件版本3(此处描述了版本),当您的应用程序被重定向至.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>
Run Code Online (Sandbox Code Playgroud)

相反,通过将上述AppContextSwitch设置为false,可以在面向.NET 4.6.2的应用程序中加载Rich Edit 4.1。

希望这会有所帮助,Tanya