Collegamenti ipertestuali interrotti nel file RTF in RichTextBox
-
22-07-2019 - |
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).
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 inRichTextBox
. -
Nelle versioni precedenti di .NET Framework, è possibile modificare
RichTextBox
per utilizzareRICHEDIT50W
: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 .