我有一个代码可以写入TabPage中所有RichTextBox的所有文本。问题是它不保存任何文本。
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);
}
答案 0 :(得分:0)
RowCount
是错误的属性,因为它返回行数,而不是制表符。例如。您可以有6个选项卡,但如果选项卡很窄并且控件宽,则RowCount
可能仍然只有1。
首先,您是否尝试枚举TabControl
中的所有页面?如果是这种情况,请在TabCount
循环中使用for
,不 RowCount
for (int i = 0; i < tabControl1.TabCount; i++)
如果您只想使用当前标签,请摆脱循环并使用tabControl1.SelectedTab
。
其次,尝试获取RichTextBox
的行永远不会起作用。 TabControl
只能托管TabPage
个实例,尝试通过RichTextBox
属性访问Controls
个实例根本不起作用。您需要首先获取TabPage
,然后枚举其上的控件以查找RichTextBox
,或者如果每页只有一个控件,则可以直接访问它。
RichTextBox richText = tabControl1.TabPages[i].Controls[0] as RichTextBox;
我完全不确定你为什么要using
阻止将内容写入projectFile
- 这只会被File.WriteAllText
的调用覆盖。
顺便说一句,手动加入路径是不好的做法 - 尝试使用Path.Combine
,例如Path.Combine(projectPathFolder, projectName, projectName + ".project");
编辑:另一点。您正在使用as RichTextBox
,这通常意味着您接受演员表可能无效并返回null
。但是,您没有对该结果进行明确的null
检查。如果您预期失败,则将File.WriteAllText
语句包装在空检查中。如果你不期望失败,那么让演员明确,让它在演员阵容中崩溃 - 最好早点失败。
RichTextBox richText = (RichTextBox)tabControl1.TabPages[i].Controls[0];
希望这有帮助。