Неработающие гиперссылки в файле RTF в RichTextBox
-
22-07-2019 - |
Вопрос
я использую 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
Чтобы воспроизвести проблему, создайте в Word (я использую 2000) документ RTF, содержащий одну ссылку, текст которой не является URL-адресом, но нацелен на действительный URL-адрес, и программно загрузите файл .rtf в файл. RichTextBox
(Я использую .NET 2.0 в C# Express 2008).
Решение
Для поддержки гиперссылок вам необходимо 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 не может отображать математические буквенно-цифровые символы Юникода..