Вопрос

я использую 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 не может отображать математические буквенно-цифровые символы Юникода..

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top