Pregunta

Estoy usando un RichTextBox para mostrar un archivo RTF, que incluye un solo hipervínculo. El texto del enlace no es una URL (el destino es una URL válida). El RTF fue creado con Word. Tanto Word como WordPad reconocen correctamente los enlaces (WordPad no inicia los enlaces, pero muestra el cursor de mano apropiado).

Cuando cargo el RTF en un RichTextBox , los enlaces aparecen formateados correctamente (azul y subrayado), pero en lugar de comportarse como un enlace, cuando el cursor se mueve sobre el enlace, sigue siendo una viga en I , el evento LinkClicked no se activará, y en realidad muestra el objetivo entre paréntesis angulares después del enlace (esto no parece correcto). Dado que el texto del enlace no es una URL, DetectUrls no ayuda aquí.

¿Hay alguna razón por la que RichTextBox no maneja adecuadamente estos enlaces, o una forma de hacer que funcionen como se espera?

Aquí está el código.

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

Para reproducir el problema, cree un documento RTF con Word (estoy usando 2000) que contiene un enlace cuyo texto no es una URL pero apunta a una URL válida, y cargue programáticamente el archivo .rtf en un RichTextBox (estoy usando .NET 2.0 en C # Express 2008).

¿Fue útil?

Solución

Para admitir hipervínculos, necesita < code> RICHEDIT50W versión de " rich edit " .

Para eso:

  • Utilice .NET Framework 4.7, que utiliza RICHEDIT50W de forma nativa en RichTextBox .
  • En versiones anteriores de .NET Framework, puede modificar RichTextBox para usar 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;
            }
        }
    }
    

Basado en RichTextBox Selection Highlight y RichTextBox no puede mostrar símbolos alfanuméricos matemáticos Unicode .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top