c# - RichTextBox 从文本中删除转义字符

标签 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 属性时,我得到了这个 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/

相关文章:

c# - Entity Framework - 底层提供程序在 ConnectionString 上失败

c# - 为什么我的 GTK# 编译二进制文件(使用 MonoDevelop 创建)不能在 Windows 上运行?

c# - 如何在Asp.net C#中调用webmethod

visual-studio - 将多组断点保存为不同的配置文件 - Visual Studio

visual-studio-2017 - 如何根据批量许可协议(protocol)安装 Visual Studio 2017 Enterprise?

c++ - MSVC 2017 在共享库中创建模板函数的拷贝

wpf - 带有图像的 RichTextBox - 行距问题

c# - 如何从数据库字段中获取 <li> 的值?

GWT:RichTextArea 中的上下文菜单

wpf - 如何在 WPF 应用程序中使用 NLog 的 RichTextBox Target?