2013-09-13 1 views
3

У меня есть проект Winforms, где я могу писать текст в RichTextBox и некоторые элементы управления, чтобы установить шрифтовые форматы написанного текста. Я могу сохранить и добавить текст в RTF-файл, но у меня возникла проблема сохранения форматов шрифтов каждого RichTextBox. Любая помощь?Как написать несколько 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(); 
    } 
} 
+0

Вы имеете в виду, когда вы открываете свой файл 'Test.rtf' (например,' WordPad'), он не показывает правильный 'ForeColor'? Какие-нибудь подробности? –

+0

Да, когда я открываю test.rtf, в этом случае либо весь текст печатается в 1 формате, либо сохраняется только содержимое первого RichTextBox. –

ответ

3

Вы можете избежать этой проблемы путем слияния всего содержимого в то же 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).

+0

Это ответ, который я искал. Большое спасибо @varocarbas !!! –

+0

@samerAzar Добро пожаловать. – varocarbas

+0

Все работает, но я не могу добавить к тому же файлу дополнительный текст ... как я могу это сделать? –

Смежные вопросы