2017-01-24 1 views
0

Ich habe eine benutzerdefinierte RichTextBox, die von der RichTextBox-Basisklasse abgeleitet ist. Sein Zweck ist es, formatierten Text anzuzeigen. Jede geladene Rtf wird jedoch als einfacher Text ohne jegliche Formatierung angezeigt: Schriftart, Schriftgröße, Schriftart etc.Unfähigkeit, Rtf korrekt in eine RichTextBox zu laden

Ich habe den folgenden Code versucht, um die Rtf zu laden: (Hinweis: RtbEx ist das erweiterte Richtextbox-Steuerelement; RTF ist eine Zeichenfolge enthält, die RTF)

  1. einen Dateistrom unter Verwendung:

    FileStream tempFile = File.Open(@"C:\RTF.rtf", FileMode.Open); 
    tempFile.Position = 0; 
    rtbEx.LoadFile(tempFile, RichTextBoxStreamType.RichText); 
    tempFile.Close(); 
    
  2. Laden aus dem angegebenen Pfad:

    rtbEx.LoadFile(@"C:\Users\Wilbur Omae\Desktop\RTF.rtf", RichTextBoxStreamType.RichText); 
    
  3. Einstellung Direkt am Rtf:

    rtbEx.Rtf = RTF; 
    

auf die Rtf der rtbEx Überprüfung, wie es scheint Rtf, perfekt zu sein, aber es wird als Klartext angezeigt.

Was könnte das Problem sein?

Update 1: Die benutzerdefinierte RichTextBox ist ein Steuerelement innerhalb einer benutzerdefinierten Form, die es als TabPage angezeigt werden soll.

+1

Dies ist eine seltsame. Wenn ich als Standard-Richtextbox-Klasse verwende und in eine RTF-Datei mit etwas Blod-Text lade, habe ich keine Probleme mit der Formatierung. Könnten Sie vielleicht die RTF-Datei und die benutzerdefinierte Klasse bereitstellen? –

+0

@DanGardner Hier ist das RTF:. '{\ rtf1 \ ansi \ ansicpg1252 \ deff0 \ deflang1033 {\ fonttbl {\ f0 \ fnil \ fcharset0 Microsoft Sans Serif;} {\ f1 \ fnil \ fcharset0 Palatino Linotype;}} \ viewkind4 \ uc1 \ pard \ f0 \ FS17 \ par durch \ par LoremIpsumDolor \ par LoremIpsumDolor \ par \ par \ par \ b \ FS16 Lorem \ i ipsum \ ul dolor \ FS56 LoremIpsumDolor \ ulnone \ b0 \ i0 \ f1 \ FS30 \ par } '. . Wordpad erkennt und öffnet die RTF-Datei korrekt. Jedoch, wenn ich meine benutzerdefinierte RichTextBox mit der Standard ersetzen, ist die Formatierung immer noch verloren. Gibt es noch etwas, das ordnungsgemäße Rendern von RTF behindern kann? –

+0

@WilburOmea Das ist interessant, so dass Sie mit der Standard-'richtextbox' die Formatierung immer noch nicht sehen können? In meinem kleinen Beispiel, das Ihren Code auf meinem Rechner verwendet, zeigt er fein an [siehe mein Bildschirm hier] ( –

Antwort

0

können Sie Zwischenablage verwenden in diesem Fall:

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

und fügen Sie diesen

RichTextBox1.Text= Clipboard.GetText() 

Es funktioniert für mich .. versuchen, es

+0

Das lässt die RichTextBox leer. Wenn Sie jedoch den überladenen 'Clipboard.GetText (TextDataFormat.Rtf)' verwenden, wird der RTF als normaler Text angezeigt. Die Einstellung 'RichTextBox1.Rtf = Clipboard.GetText (TextDataFormat.Rtf)' zeigt reinen Text an, was mein Problem ist. –

0

Als Abhilfe können gewährleistet ich die Rtf war Legen Sie nur fest, wenn das Formular angezeigt wurde, indem Sie das Ereignis Form.Shown wie folgt einfangen:

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; 
    } 
} 

Ich weiß nicht, warum das Problem so kompliziert ist, aber ich hoffe, das hilft.

Jede andere Lösung? Fühlen Sie sich frei zu kommentieren oder zu antworten.

Verwandte Themen