我正在使用 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 Highlight和 RichTextBox 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/