Как записать несколько содержимого RichTextBox в один файл RTF, сохраняя форматы шрифтов каждого RichTextBox

У меня есть проект Winforms, где я могу написать текст в RichTextBox, и некоторые элементы управления, чтобы установить форматы шрифта написанного текста. Я могу сохранить и добавить текст в файл RTF, но у меня проблема с сохранением форматов шрифтов каждого RichTextBox. Любая помощь?

КОД:

RichTextBox r1 = new RichTextBox();
RichTextBox r2 = new RichTextBox();
string nickName = "Test: ";
string message = "Hi this is a test message";
r1.Text = nickName;
r1.ForeColor = Color.Blue;

r2.Text = message;
r2.ForeColor = Color.Black;

string path = @"d:\Test.rtf";
if (!File.Exists(path))
{
    using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write))
    using (StreamWriter sw = new StreamWriter(fs))
    {
        sw.WriteLine(r1.Rtf);
        sw.WriteLine(r2.Rtf);
        sw.Close();
    }
}
else
{
    using (FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write))
    using (StreamWriter sw = new StreamWriter(fs))
    {
        sw.WriteLine(r1.Rtf);
        sw.WriteLine(r2.Rtf);
        sw.Close();
    }
}

1 ответ

Решение

Вы можете избежать этой проблемы, объединив все содержимое в один RichTextBox, Образец:

r1.Text = r1.Text + Environment.NewLine;
r1.SelectAll();
r1.Copy();
r2.Paste();

r2.SaveFile(path);

Этот подход прекрасно работает с StreamWriter как вы использовали это. С другой стороны, почему бы не использовать более простой / специально разработанный для этой цели метод (SaveFile)? Если вы не хотите заменять содержимое в r2можно рассчитывать на временную RichTextBox:

 r1.Text = r1.Text + Environment.NewLine;
 r1.SelectAll();
 r1.Copy();
 RichTextBox temp = new RichTextBox();
 temp.Paste();
 r2.SelectAll();
 r2.Copy();
 temp.Paste();

 temp.SaveFile(path);

ПРИМЕЧАНИЕ: могут быть проблемы при использовании StreamWriter (добавить, например). Имейте в виду, что RTF - это особый формат, который требует особого подхода: выполните любые изменения из RichTextBox контролировать (добавлять, удалять, редактировать и т. д. текст / формат) и полагаться на методы LoadFile а также SaveFile, а не в файлах для файлов TXT (т. е. StreamReader/StreamWriter).

Другие вопросы по тегам