Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将多个RichTextBox内容写入一个RTF文件,保留每个RichTextBox的字体格式_C#_Winforms_Rtf_Streamwriter - Fatal编程技术网

C# 如何将多个RichTextBox内容写入一个RTF文件,保留每个RichTextBox的字体格式

C# 如何将多个RichTextBox内容写入一个RTF文件,保留每个RichTextBox的字体格式,c#,winforms,rtf,streamwriter,C#,Winforms,Rtf,Streamwriter,我有一个Winforms项目,可以在其中将文本写入RichTextBox,还有一些控件可以设置写入文本的字体格式。我可以保存文本并将其附加到RTF文件中,但我在保存每个RichTextBox的字体格式方面遇到了问题。有什么帮助吗 代码: 通过将所有内容合并到相同的RichTextBox,可以避免此问题。样本: r1.Text = r1.Text + Environment.NewLine; r1.SelectAll(); r1.Copy(); r2.Paste(); r2.SaveFile(p

我有一个Winforms项目,可以在其中将文本写入RichTextBox,还有一些控件可以设置写入文本的字体格式。我可以保存文本并将其附加到RTF文件中,但我在保存每个RichTextBox的字体格式方面遇到了问题。有什么帮助吗

代码:


通过将所有内容合并到相同的
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)方法.

您的意思是当您打开
Test.rtf
文件(例如使用
WordPad
)时,它不会显示正确的
前景色
?还有更多详细信息吗?是的,当我打开test.rtf时,在这种情况下,要么所有文本都以1格式打印,要么只保存第一个RichTextBox的内容。一切正常,但我无法向同一文件追加额外文本。。。我的意思是,我上面的方法在使用streamWriter进行追加时可以很好地处理纯文本,但不能处理RichTextBox:using(FileStream fs=new FileStream(path,FileMode.append,FileAccess.Write))using(streamWriter sw=new streamWriter(fs)){sw.WriteLine(r2.Rtf);sw.Close();}有什么建议吗?@samerAzar你是对的,在附加它时会有问题。请记住,rtf是一种“特殊格式”(如MS Office Word)。我测试了StreamWriter,它成功了,这就是为什么我认为您可以不受任何限制地使用它,但显然不是这样。避免问题的最佳方法是依赖于特定的方法,在这种情况下:SaveFile和LoadFile(忽略streamWriter)。如果你想覆盖1.rtf,请使用richTextBox.LoadFile(“1.rtf”)添加任何你想添加的内容,并使用richTextBox.SaveFile(“1.rtf”)保存它。@samerAzar我在我的回答中添加了一个澄清,与我之前的评论基本相同:最好不要将rtf视为TXT(=尽可能少地依赖StreamWriter/StreamReader).
 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);