2017-01-24 5 views
0

J'ai un RichTextBox personnalisé qui dérive de la classe de base RichTextBox. Son but est d'afficher du texte formaté. Cependant, tout Rtf chargé est affiché comme texte simple sans aucun formatage: police, taille de police, style de police etc.Impossible de charger correctement Rtf dans un RichTextBox

J'ai essayé le code suivant pour charger le Rtf: (Note: rtbEx est le contrôle de la zone de texte enrichi; RTF est une chaîne contenant le Rtf)

  1. l'utilisation d'un flux de fichier:

    FileStream tempFile = File.Open(@"C:\RTF.rtf", FileMode.Open); 
    tempFile.Position = 0; 
    rtbEx.LoadFile(tempFile, RichTextBoxStreamType.RichText); 
    tempFile.Close(); 
    
  2. Chargement du chemin d'accès spécifié:

    rtbEx.LoadFile(@"C:\Users\Wilbur Omae\Desktop\RTF.rtf", RichTextBoxStreamType.RichText); 
    
  3. directement la mise en Rtf:

    rtbEx.Rtf = RTF; 
    

Lors de la vérification du Rtf du rtbEx, il semble être parfait Rtf, mais il est affiché sous forme de texte.

Quel pourrait être le problème?

Mise à jour 1: Le contrôle personnalisé RichTextBox est un contrôle au sein d'un Form personnalisé qu'il doit afficher sous la forme d'un onglet.

+1

Ceci est étrange. Lorsque j'utilise comme classe richtextbox standard et charge dans un fichier RTF avec du texte blod, je n'ai aucun problème avec l'affichage du formatage. Pourriez-vous fournir le fichier RTF et la classe personnalisée? –

+0

@DanGardner Voici le RTF:. {\ ftf1 \ ansi \ ansicpg1252 \ deff0 \ deflang1033 {\ fonttbl {\ f0 \ fnil \ fcharset0 Microsoft Sans serif;} {\ f1 \ fnil \ fcharset0 Palatino Linotype;}} \ viewkind4 \ uc1 \ pard \ f0 \ fs17 \ par par \ par LoremIpsumDolor \ par LoremIpsumDolor \ par \ par \ par \ b \ FS16 Lorem \ i ipsum \ ul dolor \ FS56 LoremIpsumDolor \ ulnone \ b0 \ i0 \ f1 \ FS30 \ par } '. . Wordpad reconnaît et ouvre correctement le fichier RTF. Cependant, lorsque je remplace mon RichTextBox personnalisé par le format standard, le formatage est toujours perdu. Y a-t-il quelque chose d'autre qui pourrait nuire au bon rendu de Rtf? –

+0

@WilburOmea C'est intéressant, donc en utilisant le 'richtextbox 'standard, vous ne voyez toujours pas le formatage? Dans mon petit exemple en utilisant votre code sur ma machine il affiche très bien [voir ma capture d'écran ici] (http://pasteboard.co/2AMYgXbg0.png) –

Répondre

0

vous pouvez utiliser Presse-papiers dans ce cas:

Clipboard.SetText(RichTextBox1.Rtf, TextDataFormat.Rtf); 

et collez-le

RichTextBox1.Text= Clipboard.GetText() 

Il fonctionne pour moi .. essayer

+0

Cela laisse le RichTextBox vide. Cependant, l'utilisation du 'Clipboard.GetText (TextDataFormat.Rtf)' surchargé affiche le Rtf en tant que texte ordinaire. Définir 'RichTextBox1.Rtf = Clipboard.GetText (TextDataFormat.Rtf)' affiche le texte brut, qui est mon problème. –

0

Pour contourner ce problème, je le Rtf était assuré défini uniquement lorsque le formulaire a été affiché en capturant l'événement Form.Shown comme indiqué ci-dessous:

public class SermonReader : Form 
{ 
    public RichTextBoxEx rtbEx= new RichTextBoxEx(); 
    private string RTF = ""; 

    public SermonReader(string rtf) 
    { 
     RTF = rtf; 

     Shown += new EventHandler(ehFormShown); 
     FormBorderStyle = FormBorderStyle.None; 
     TopLevel = false; 

     Controls.Add(rtbEx); 

     rtbEx.Dock = DockStyle.Fill; 
    } 
    private void ehFormShown(object sender, EventArgs e) 
    { 
     rtbEx.Rtf = RTF; 
    } 
} 

Je ne sais pas pourquoi le problème est aussi compliqué mais j'espère que cela aidera.

Une autre solution? N'hésitez pas à commenter ou à répondre.