[C#] RichTextBox formatierten Text einfügen

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
BeRsErKeR
Establishment
Beiträge: 689
Registriert: 27.04.2002, 22:01

[C#] RichTextBox formatierten Text einfügen

Beitrag von BeRsErKeR »

Hallo,

ich möchte in einer RichTextBox Text formatiert (farbig, bold, etc) einfügen. Mein bisheriger Code:

Code: Alles auswählen

void AddText(string text, Color color)
{
  int pos = myRichTextBox.Text.Length;
  myRichTextBox.Text += text;
  myRichTextBox.Select(pos, text.Length);
  myRichTextBox.SelectionColor = color;
}
Es funktioniert auch, allerdings überschreibt der zweite Aufruf die Farbe des gesamten vorherigen Textes. Beispiel:

Code: Alles auswählen

AddText("bla\n", Color.Blue);
AddText("blub\n", Color.Red);
Dies führt dazu dass auch die erste Zeile mit "bla" rot wird. Baue ich ein Sleep zwischen den Aufrufen ein, so ist die erste Zeile zunächst blau und nach dem zweiten Aufruf dann rot. Wobei dies eigentlich nicht ganz korrekt ist: Der letzte Aufruf überschreibt nichts mehr und sieht auch korrekt aus. Aber alles vorher überschreibt den gesamten Text. Ich habe irgendwie die Befürchtung dass da irgendwie eine Standardfarbe überschrieben wird oder so, aber in allen möglichen Anleitungen soll das angeblich so gehen.

Noch kurioser ist, dass ein Aufruf von Select mit pos + 1 als Anfang dazu führt dass keinerlei Formatierung stattfindet, außer beim letzten Aufruf, der wieder normal ist.

Kann mir jemand helfen?
Ohne Input kein Output.
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: [C#] RichTextBox formatierten Text einfügen

Beitrag von CodingCat »

Ich tippe darauf, dass Hinzufügen von Text mit += eher suboptimal ist. Vermutlich wird daraus einfach mrtb.Text = mrtb.Text + text, was unter der Annahme, dass Text nur Plain Text zurückgibt, automatisch jede Formatierung zunichte machen würde. Probier mal AppendText o.ä.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Benutzeravatar
BeRsErKeR
Establishment
Beiträge: 689
Registriert: 27.04.2002, 22:01

Re: [C#] RichTextBox formatierten Text einfügen

Beitrag von BeRsErKeR »

Ok Problem gelöst. Man muss die Methode AppendText nutzen, dann funktioniert es. Ein Hinzufügen von Text mittels += scheint die Formatierung zu vermurksen. Keine Ahnung ob das Sinn macht oder ein Bug ist...

Edit: Ah CodingCat vielen Dank. Du hast zur selben Zeit gepostet. Habs grad selbst hinbekommen. Aber macht dann wohl Sinn. Danke nochmal. ;)
Ohne Input kein Output.
odenter
Establishment
Beiträge: 207
Registriert: 26.02.2009, 11:58

Re: [C#] RichTextBox formatierten Text einfügen

Beitrag von odenter »

Ich weiss nicht wofür Du das benutzen willst, aber Du musst mal probieren wie performant das läuft, am besten mit ner richtig großen Datei.
Vor einigen Jahren hatte ein Kollege von mir auch mal mit RTF's rumprobiert, für einen eigenen kleinen Editor. Ich meine mich zu erinnern das die *.dll (für das RTF) die mit WindowsXP ausgeliefert wurde die schnellste war.
Am Ende hat er mit SendMessage direkt an das Fenster den Text mit den entsprechenden RTF-Tags gesendet, weil alles andere zu langsam war. Kann sich aber auch unter .NET erledigt habe, oder für Dich gar nicht interessant weil Du das nicht für einen Editor brauchst oder nur wirklich kleine Dateien hast. :)

Falls Du das für einen Editor brauchst, solltest Du mal Scintilla angucken oder das hier http://www.catch22.net/tuts/neatpad, falls Du es nicht kennst.
Benutzeravatar
BeRsErKeR
Establishment
Beiträge: 689
Registriert: 27.04.2002, 22:01

Re: [C#] RichTextBox formatierten Text einfügen

Beitrag von BeRsErKeR »

Danke für den Hinweis und den Link. In meinem Fall benutzte ich das ganze nur um eine Log-Ausgabe übersichtlicher zu formatieren. Es handelt sich also eher um kleine Datenmengen und die Zeit der Logausgabe ist nicht kritisch, da die Generier-Prozesse die geloggt werden Minuten und teilweise auch einige Stunden dauern. ;)
Ohne Input kein Output.
Antworten