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).

Était-ce utile?

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 dans RichTextBox .
  • Dans les anciennes versions de .NET Framework, vous pouvez modifier RichTextBox pour utiliser 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;
            }
        }
    }
    

Basé sur les sélection de RichTextBox et RichTextBox ne peut pas afficher les symboles alphanumériques mathématiques Unicode .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top