Liens hypertexte rompus dans un fichier RTF dans RichTextBox
-
22-07-2019 - |
Question
J'utilise un RichTextBox
pour afficher un fichier RTF, qui comprend un seul lien hypertexte. Le texte du lien n'est pas une URL (la cible est une URL valide). Le format RTF a été créé avec Word. Word et WordPad reconnaissent correctement les liens (WordPad ne les lance pas, mais affiche le curseur de main approprié).
Lorsque je charge le format RTF dans un RichTextBox
, les liens apparaissent correctement formatés (en bleu et souligné), mais plutôt que de se comporter comme un lien, lorsque le curseur le survole, il reste un rayon en I , l'événement LinkClicked
ne se déclenchera pas et affichera la cible entre les chevrons après le lien (cela ne semble pas correct). Le texte du lien n'étant pas une URL, DetectUrls
n'aide pas ici.
Y a-t-il une raison pour laquelle RichTextBox
ne gère pas correctement ces liens, ou un moyen de les faire fonctionner comme prévu?
Voici le code.
TipView.Rtf = tips[tipIndex];
// I've also tried TipView.LoadFile, with identical result
Pour reproduire le problème, créez un document RTF avec Word (J'utilise 2000) contenant un lien dont le texte n'est pas une URL mais cible une URL valide, puis chargez le fichier .rtf par programme dans un RichTextBox
(J'utilise .NET 2.0 dans C # Express 2008).
La solution
Pour prendre en charge les liens hypertexte, vous devez < code> RICHEDIT50W version de "rich edit" .
Pour cela:
- Utilisez soit .NET Framework 4.7, qui utilise
RICHEDIT50W
de manière native dansRichTextBox
. -
Dans les anciennes versions de .NET Framework, vous pouvez modifier
RichTextBox
pour utiliserRICHEDIT50W
: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; } } }
Basé sur les sélection de RichTextBox et RichTextBox ne peut pas afficher les symboles alphanumériques mathématiques Unicode .