将TabControl中的Richtextbox文本保存到文件中

时间:2017-10-07 16:44:47

标签: c#

我有一个代码可以写入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);
}

1 个答案:

答案 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];

希望这有帮助。