RichTextBox从文本中删除转义字符

时间:2018-01-21 20:08:31

标签: c# visual-studio-2017 richtextbox rtf .net-4.7.1

在将文本添加到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中的转义字符,谁知道为什么?

1 个答案:

答案 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;
&#13;
&#13;

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

希望这有帮助,Tanya