繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM