我正在使用
RichTextBox
显示 RTF 文件,其中包含单个超链接。链接文本不是 URL(目标是有效的 URL)。 RTF 是用Word 创建的。 Word 和写字板都能正确识别链接(写字板不会启动链接,但会显示相应的手形光标)。
当我将 RTF 加载到
RichTextBox
中时,链接的显示格式正确(蓝色且带下划线),但其行为并不像链接,当光标移动到链接上时,它仍然是 I 形梁,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 数学字母数字符号。
升级到
RICHEDIT50W
后,您可能需要额外的修复: