Laden...

Richtextbox Hintergrundfarbe speichert (.rtf)

Erstellt von Thomas_TK vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.582 Views
T
Thomas_TK Themenstarter:in
7 Beiträge seit 2015
vor 8 Jahren
Richtextbox Hintergrundfarbe speichert (.rtf)

Hallo Leute,

ich hätte da eine Frage an euch. Ich hoffe ihr könnt mir helfen.

Ich habe im Moment das folgende Problem, dass wenn ich den Inhalt einer Richtextbox speichere, die Hintergrundfarbe nicht mit gespeichert wird.

Die anderen Formatierungen wie (Schriftart- größe- style, Absatz (linksbündig, rechts, ), Schriftfarbe)

Nur der Hintergrund bleibt beim nächsten öffnen der Datei weiß.

Ich habe im Internet etwas gefunden, was auch teilweise funktioniert.

Der Code:

richTextBoxBodyText.SelectAll();
                    richTextBoxBodyText.SelectionBackColor = richTextBoxBodyText.BackColor;
                    richTextBoxBodyText.DeselectAll();

Die Hintergrundfarbe wird nur gespeichert, wo etwas auch drinn ist. also text. Ich will aber, dass es komplett die Box speichert.

Ich hoffe ihr könnt mir helfen und dass ich mein Problem gut beschrieben habe

H
523 Beiträge seit 2008
vor 8 Jahren

Die Hintergrundfarbe (BackColor) der Richtextbox musst Du separat speichern, weil diese zum Control und nicht zum RTF-Text (= Inhalt) gehört.

T
Thomas_TK Themenstarter:in
7 Beiträge seit 2015
vor 8 Jahren

Hallo hypersurf,

vielen Dank für deine schnelle Antwort.

Wie mache ich das ?

1.696 Beiträge seit 2006
vor 8 Jahren

Wie mache ich das ?

Du kannst z.B. so vorgehen How to store user's preferences in a windows forms

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

M
184 Beiträge seit 2012
vor 8 Jahren

Wie schon gesagt, gibt es in RTF keine Möglichkeit, die Hintergrundfarbe für das gesamte Dokument zu speichern.
Das müsste man sich dann selbst basteln, z.B. indem man am Dateiende hinter \0 (NULL) die Farbinformation mitspeichert und von dort auch wieder ausliest.

Allerdings funktioniert das auslesen dann natürlich nicht bei anderen RTF-Programmen, da du dich damit nicht an die RTF-Spezifikationen hälst.

So als Beispiel (Quick&Dirty)

public class RichTextBoxEx : RichTextBox
{
  public void SaveFileWithBackground(String path)
  {
    using (TextWriter writer = new StreamWriter(path))
    {
      writer.Write(this.Rtf);
      String suffix = this.BackColor.ToArgb().ToString();
      writer.Write("\0" + suffix);
    }
  }

  public void LoadFileWithBackground(String path)
  {
    try
    {
      using (TextReader reader = new StreamReader(path))
      {
        String text = reader.ReadToEnd();
        String suffix = text.Substring(text.LastIndexOf('\0') + 1);
        int colorValue;
        if (int.TryParse(suffix, out colorValue))
        {
          Color color = Color.FromArgb(colorValue);
          this.BackColor = color;
        }
        this.Rtf = text;
      }
    }
    catch
    {
      this.LoadFile(path);
    }
  }
}