c# - RichTextBox 中 RTF 文件中损坏的超链接

标签 c# .net winforms richtextbox rtf

我正在使用 RichTextBox 来显示包含单个超链接的 RTF 文件。链接文本不是 URL(目标有效的 URL)。 RTF 是用 Word 创建的。 Word 和写字板都能正确识别链接(写字板不会启动链接,但会显示相应的手形光标)。

当我将 RTF 加载到 RichTextBox 时,链接显示格式正确(蓝色和下划线),但不像链接那样表现,当光标移到链接上时它仍然是工字梁, LinkClicked 事件将不会触发,它实际上显示链接后尖括号之间的目标(这似乎不正确)。由于链接文本不是 URL,DetectUrls 在这里没有帮助。

是否有 RichTextBox 没有正确处理这些链接的原因,或者有什么方法可以使它们按预期工作?

这是代码。

TipView.Rtf = tips[tipIndex];
// I've also tried TipView.LoadFile, with identical result

要重现该问题,请使用 Word(我使用的是 2000)创建一个 RTF 文档,其中包含一个文本不是 URL 但指向有效 URL 的链接,然后以编程方式将 .rtf 文件加载到 RichTextBox(我在 C# Express 2008 中使用 .NET 2.0)。

最佳答案

要支持超链接,您需要 RICHEDIT50W version of "rich edit" .

为此:

  • 要么使用 .NET Framework 4.7,它在 RichTextBox 中原生使用 RICHEDIT50W

  • 在旧版本的 .NET Framework 中,您可以修改 RichTextBox 以使用 RICHEDIT50W:

      public class ExRichText : RichTextBox
      {
          [DllImport("kernel32.dll", EntryPoint = "LoadLibraryW",
                     CharSet = CharSet.Unicode, SetLastError = true)]
          private static extern IntPtr LoadLibraryW(string s_File);
    
          protected override CreateParams CreateParams
          {
              get
              {
                  var cp = base.CreateParams;
                  LoadLibraryW("MsftEdit.dll");
                  cp.ClassName = "RichEdit50W";
                  return cp;
              }
          }
      }
    

基于 RichTextBox Selection HighlightRichTextBox cannot display Unicode Mathematical alphanumeric symbols .


升级到 RICHEDIT50W 后,您可能需要额外修复:
Some hyperlinks don't trigger the LinkClicked event when loading a file into RichTextBox

关于c# - RichTextBox 中 RTF 文件中损坏的超链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1647004/

相关文章:

C# 是否有内置函数可以将格式化的字符串转换回数字?

c# - 我的 BubbleSort 类没有正确计算迭代次数

c# - 如何从子表单引用表单?

c# - 将派生类添加到 DataGridView 的绑定(bind)源

c# - 在 C# 中使用多个表单

c# - 多次调用 PropertyChanged 的​​ ViewModel 属性

c# - 搜索文本格式,先上,其余下

c# - Windows Server 2008 上的正则表达式速度慢

c# - 什么时候在 mvvm 中使用 Dispatcher?

c# - 带有 AutoSize 的面板内的 FlowLayoutPanel 问题