Domanda

Sto usando un RichTextBox per visualizzare un file RTF, che include un singolo collegamento ipertestuale. Il testo del collegamento non è un URL (il target è un URL valido). RTF è stato creato con Word. Sia Word che WordPad riconoscono correttamente i collegamenti (WordPad non avvia i collegamenti, ma mostra il cursore della mano appropriato).

Quando carico l'RTF in un RichTextBox i collegamenti appaiono formattati correttamente (blu e sottolineati), ma invece di comportarsi come un collegamento, quando il cursore si sposta sul collegamento rimane un raggio I , l'evento LinkClicked non si attiva e mostra effettivamente il target tra parentesi angolari dopo il collegamento (ciò non sembra corretto). Poiché il testo del collegamento non è un URL, DetectUrls non aiuta qui.

C'è un motivo per cui RichTextBox non gestisce correttamente questi collegamenti o un modo per farli funzionare come previsto?

Ecco il codice.

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

Per riprodurre il problema, crea un documento RTF con Word (sto usando 2000) contenente un link il cui testo non è un URL ma ha come target un URL valido e carica a livello di codice il file .rtf in un RichTextBox (sto usando .NET 2.0 in C # Express 2008).

È stato utile?

Soluzione

Per supportare i collegamenti ipertestuali, è necessario < code> RICHEDIT50W versione di " rich edit " .

Per questo:

  • Utilizzare .NET Framework 4.7, che utilizza RICHEDIT50W in modo nativo in RichTextBox .
  • Nelle versioni precedenti di .NET Framework, è possibile modificare RichTextBox per utilizzare 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;
            }
        }
    }
    

Basato su Aspetto selezione RichTextBox e RichTextBox non può visualizzare simboli alfanumerici matematici Unicode .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top