RichTextBox中RTF文件中的超链接断开

sna*_*arf 7 .net c# rtf richtextbox winforms

我正在使用a 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
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ryl 6

要支持超链接,您需要RICHEDIT50W使用“ rich edit”版本

为了那个原因:

  • 可以使用.NET Framework 4.7,它RICHEDIT50W在.NET Framework中是本机使用的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;
            }
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

根据RichTextBox的选择,HighlightRichTextBox无法显示Unicode数学字母数字符号