2008-09-25 9 views
5

Ich muss erstellen und in die Zwischenablage einige RichText mit Standard "Formatierung" wie fett/kursiv, Einzüge und dergleichen. So wie ich es jetzt tue, scheint Art von unelegant ... Ich bin ein RichTextBox Artikel erstellen und meine Formatierung durch die Anwendung von in etwa so:Bessere Möglichkeit, RichText in C# zu manipulieren?

RichTextBox rtb = new RichTextBox(); 
Font boldfont = new Font("Times New Roman", 10, FontStyle.Bold); 
rtb.Text = "sometext"; 
rtb.SelectAll() 
rtb.SelectionFont = boldfont; 
rtb.SelectionIndent = 12; 

es einen besseren Weg zu sein, hat aufgestellt, aber nach einem Nach einigen Stunden der Suche konnte ich nichts Besseres finden. Irgendwelche Ideen?

Bearbeiten: Die RichTextBox (Rtb) wird nicht irgendwo in einem Formular angezeigt/gezeichnet. Ich benutze nur das Objekt, um meinen RichText zu formatieren.

Antwort

3

Sie können das Layout der Richtextbox aussetzen, bevor Sie all dies tun, um unnötiges Flimmern zu vermeiden. Das ist einer der häufigsten Fehler, die ich verwendet, um die machte es „unelegant“ scheinen

+1

Nun, das ist die Sache; Die RichTextBox wird nicht irgendwo * angezeigt *. Ich benutze sie nur, weil ich keine ebenso einfache Möglichkeit gefunden habe, RichText zu bearbeiten/zu formatieren. Danke für Ihren Vorschlag. – BKimmel

+0

Nun, ich nehme an, Sie könnten eine ganze Klassenstruktur und Methoden erstellen und was nicht, um Rich Text direkt zu manipulieren, und dann könnten Sie diesen Code online posten, damit andere ihn verwenden können. Eine Google-Suche nach Rich-Text-Bibliotheken ergibt nichts? – hova

2

Sie einige Utility-Erweiterungsmethoden schaffen könnte, um es ‚elegant‘ :)

public static RichTextBox Set(this RichTextBox rtb, Font font, string text) 
{    
    rtb.Text = text; 
    rtb.SelectAll(); 
    rtb.SelectionFont = font; 
    rtb.SelectionIndent = 12; 
    return rtb; 
} 

Und nennen Sie eher wie dieses zu machen:

someRtb.Set(yourFont, "The Text").AndThenYouCanAddMoreAndCHainThem(); 

Edit: Ich sehe jetzt, dass Sie es nicht sogar anzeigen. Hm, interessant, sorry, ich war nicht viel Hilfe bei der Bereitstellung einer Non-RTB-Art.

+0

Das ist gut, sollte aber mit dem Vorschlag von @hova gekoppelt werden, das Neuzeichnen zu unterbrechen, während es geschieht. –

3

Ich denke, Ihre Technik ist eine großartige Möglichkeit, um das zu erreichen, was Sie tun möchten. Ich weiß, was du meinst ... es fühlt sich irgendwie "dreckig" an, weil du ein Winforms-Steuerelement für etwas anderes verwendest, als es ursprünglich vorgesehen war, aber es funktioniert einfach. Ich habe diese Technik seit Jahren benutzt. Interessiert, um zu sehen, ob jemand andere lebensfähige Optionen hat.

+0

Einverstanden. Es unterscheidet sich nicht von der Erstellung eines WebBrowser-Steuerelements, nur um eine Seite zu analysieren und den Text oder etwas, was ich vorher gemacht habe, zu erhalten. Nichts ist falsch daran, Tools für neue Zwecke zu verwenden. –

+0

Ja, genau das versuche ich zu sagen ... es fühlt sich einfach falsch an ...Wenn es keine ebenso einfache Möglichkeit gibt, das zu tun, geht es mir gut ... Ich würde viel lieber tun, als herum zu versuchen, Strings manuell in RTF zu formatieren ... Ich dachte nur, dass da draußen etwas sein muss, das mir fehlt . – BKimmel

0

Ich weiß, dass es eine Weile gewesen ist, aber diese Stackoverflow Post Check-out rtf zu HTML umwandelt. Es wäre wahrscheinlich viel einfacher, deine Sachen in html zu bringen, sie zu manipulieren, dann entweder mit html anzuzeigen oder sie in rtf umzuwandeln.

Convert Rtf to HTML

1

Sie sollten auch das Layout der richtextbox nur nach der Erstellung auszusetzen und sie nach dem Gebrauch entsorgt werden.

RichTextBox rtb = new RichTextBox(); 
rtb.SuspendLayout(); 
//richtext processing goes here... 
rtb.Dispose(); 

Und seien Sie nicht schüchtern, richttextbox für Richtigtextverarbeitung zu verwenden. Microsoft selbst tut dies hier in this Tutorial. :-)

Verwandte Themen