Неработающие гиперссылки в RTF-файле в RichTextBox - PullRequest
6 голосов
/ 30 октября 2009

Я использую RichTextBox для отображения файла RTF, который содержит одну гиперссылку. Текст ссылки не является URL-адресом (целевой адрес является действительным URL-адресом). RTF был создан с помощью Word. И Word, и WordPad правильно распознают ссылки (WordPad не запускает ссылки, но показывает соответствующий курсор на руке).

Когда я загружаю RTF в RichTextBox, ссылки отображаются правильно отформатированными (синие и подчеркнуты), но вместо того, чтобы вести себя как ссылка, когда курсор перемещается по ссылке, он остается двутавровой балкой, LinkClicked событие не сработает, и оно фактически показывает цель в угловых скобках после ссылки (это не кажется правильным). Поскольку текст ссылки не является URL-адресом, DetectUrls здесь не поможет.

Существует ли причина, по которой RichTextBox неправильно обрабатывает эти ссылки или способ заставить их работать должным образом?

Вот код.

TipView.Rtf = tips[tipIndex];
// I've also tried TipView.LoadFile, with identical result

Чтобы воспроизвести проблему, создайте документ в формате RTF с Word (я использую 2000), содержащий одну ссылку, текст которой не является URL-адресом, но предназначается для действительного URL-адреса, и программно загрузите файл .rtf в RichTextBox (I использую .NET 2.0 в C # Express 2008).

1 Ответ

4 голосов
/ 17 мая 2018

Для поддержки гиперссылок вам потребуется RICHEDIT50W версия "rich edit" .

Для этого:

  • Либо используйте .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 Математические буквенно-цифровые символы .

...