[英]Save Richtextbox text in TabControl to a file
我有一个代码,可以将TabPage中所有RichTextBoxes的所有文本写给我。 问题在于它不保存任何文本。
string projectFile = projectPathFolder + @"\" + projectName + @"\" + projectName + ".project";
for (int i = 0; i < tabControl1.RowCount; i++)
{
RichTextBox richText = tabControl1.Controls[i] as RichTextBox;
using (var stream = new StreamWriter(File.Create(projectFile)))
{
stream.Write(scintilla.Text);
}
File.WriteAllText(projectFile, "// " + tabControl1.TabPages[i].Text + "\n\n" + richText.Text, Encoding.UTF8);
}
RowCount
是错误的属性,因为它返回的是行数,而不是制表符。 例如,您可能有6个选项卡,但如果选项卡较窄且控件较宽,则RowCount
可能仍仅为1。
首先,您是否试图枚举TabControl
所有页面? 如果是这样的情况下,使用TabCount
在你for
循环,而不是 RowCount
for (int i = 0; i < tabControl1.TabCount; i++)
如果只想使用当前选项卡,则摆脱循环,而只需使用tabControl1.SelectedTab
。
其次,试图获取RichTextBox
的行永远都行不通。 TabControl
只能托管TabPage
实例,并且尝试通过Controls
属性访问RichTextBox
实例根本行不通。 您将需要首先获取TabPage
,然后枚举其上的控件以找到RichTextBox
,或者如果每页只有一个控件,则可以直接访问它。
RichTextBox richText = tabControl1.TabPages[i].Controls[0] as RichTextBox;
我完全不确定为什么要using
块将内容写入projectFile
它将被File.WriteAllText
的调用覆盖。
Path.Combine
,手工连接路径是不好的做法-尝试使用Path.Combine
,例如Path.Combine(projectPathFolder, projectName, projectName + ".project");
编辑:另一点。 您将其as RichTextBox
,这通常意味着您接受强制转换可能无效并返回null
。 但是,您不会对该结果进行显式的null
检查。 如果您期望失败,则将File.WriteAllText
语句包装为null检查。 如果您不希望失败,那么请进行明确的转换,并使其在转换时崩溃-最好早于失败。
RichTextBox richText = (RichTextBox)tabControl1.TabPages[i].Controls[0];
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.