Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# RichTextBox中RTF文件中断开的超链接_C#_.net_Winforms_Richtextbox_Rtf - Fatal编程技术网

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

C# RichTextBox中RTF文件中断开的超链接,c#,.net,winforms,richtextbox,rtf,C#,.net,Winforms,Richtextbox,Rtf,我使用RichTextBox来显示一个RTF文件,其中包含一个超链接。链接文本不是URL(目标是有效的URL)。RTF是用Word创建的。Word和写字板都能正确识别链接(写字板不会启动链接,但会显示相应的手动光标) 当我将RTF加载到RichTextBox中时,链接显示格式正确(蓝色和下划线),但其行为不像链接,当光标移动到链接上时,它仍然是一个工字梁,单击的LinkClicked事件将不会触发,它实际上会在链接后的尖括号中显示目标(这似乎不正确)。由于链接文本不是URL,DetectUrls

我使用
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)。

要支持超链接,您需要

为此:

  • 或者使用.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;
            }
        }
    }
    


基于和。

您好,您在RTF中尝试过带重音的字符吗?它正常工作了吗?