我正在使用一个 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 “丰富的编辑”版本.

为了那个原因:

  • 要么使用 .NET Framework 4.7,它使用 RICHEDIT50W 原生于 RichTextBox.
  • 在旧版本的 .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 选择突出显示RichTextBox 无法显示 Unicode 数学字母数字符号.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top