Formatiert in eine RichTextBox schreiben

Hallo,

gibt es eine Möglichkeit, einen Text mit definierter Formatierung direkt so in eine RichTextBox zu schreiben.

Ich möchte also nicht erst den Umweg gehen: Schreibe Text, markiere den Text, Formatiere den Text …
sondern ich will gleich sagen: füge den Text mit der Formatierung hinzu.

Ich möchte eine Statusanzeige realisieren. Dort sollen aktuellen Warnungen und Fehler nacheinander hinzugefügt werden, welche unterschiedlich formatiert werden.

btw.
ist das Markieren nicht eigentlich ein schlechtes Konzept? Weil der Nutzer sieht doch, wenn das Programm was markiert, wenn das Programm langsam ist und die Markierung des Nutzers wird ja dadurch auch zurückgesetzt.

Danke

Hallo!

Du kannst im Prinzip 2 alternative Wege zu dem von Dir beschriebenen Vorgehen wählen:

  1. Setze erst die Markierung dorthin, wo Du einzufügen gedenkst, dann die Formatierung an dieser Stelle (z.B. Setzen von SelectedFont) und füge anschließend erst den Text ein.
  2. Du arbeitest mit einer zweiten, unsichtbaren RTB, in der Du in beliebiger Reihenfolge den Text formatierst und den fertig formatierten Text fügst Du dann über die SelectedRtf-Eigenschaft in die erste RTB ein.

Daran, dass man zum Einfügen von Text immer erst die Markierung an die Einfügestelle setzen muss, kommt man leider nicht vorbei. Ist aber auch nicht spezifisch nur bei der RTB so, sondern letztlich bei allen von TextBoxBase abgeleiteten Klassen.

Gruß,
Martin

Danke.

Jetzt habe ich nur noch ein Problem.
Immer wenn ich einen Text mit
myBox.Text += „test…“;
einfüge, dann werden alle obrigen formatierugen zerstört

Beispiel-Text (formatiert gegeben):
hallo // rot
test // grün
123 // rot

Wenn ich jetzt mit += „…“ einfüge (ohne irgendeine formatierung), dann wird alles rot :frowning:

Ich suche den Fehler bereits seit 1,5 h und find ihn einfach nicht.

Edit:
Ich stelle fest, dass nach dem Einfügen alles so farbig formatiert wird, wie das 1. Zeichen in der RichTextBox formatiert ist.

Warum ist das so?

Leider kann ich im Control nicht einfach Zeilen hinzufügen
Lines.Add() oder und zeilen einzeln bearbeiten.
Ich bin diesen Control nicht so begeistert :frowning:

Hallo!

Durch Dein rtb.Text += „irgendwas“; weist Du dem Text-Property jedesmal einen komplett neuen Wert zu. Der zugewiesene String hat per se keine Formatierungsangaben, darum wird alles gleich formatiert.
Wenn Du unterschiedlichen Text unterschiedlich formatieren willst, darfst Du nicht immer den gesamten Text ersetzen, sondern musst die SelectedText bzw. SelectedRtf Properties verwenden.

Gruß,
Martin

Danke. Jetzt habe ichs verstanden.
So funktioniert es:

public void AddErrorMessage(string sErrorMessage)
{
rtbMessageBox.Select(rtbMessageBox.Text.Length, 0);
rtbMessageBox.SelectionColor = Color.Red;
rtbMessageBox.SelectedText = sErrorMessage + Environment.NewLine;
}