2017-10-07 71 views
0

我有一段代码会将所有来自TabPage中RichTextBoxes的文本写入我的文本中。问题是它不保存任何文本。将Richtextbox文本保存到TabControl中的文件

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

考虑使用['Path.Combine'](https://msdn.microsoft.com/en-us/library/fyy7a5kt(v = vs.110).aspx)构建您的路径。 –

+0

我不认为你的问题是特别清楚的,因为你并没有真正说明你想要做什么,从条形码片段中可以找到什么东西。也许你可以编辑你的问题来包含一些更多的细节,例如如何设置'TabControl'的内容,以及您期待代码执行的内容,例如保存所有选项卡的内容,当前选项卡等。 –

+0

在一个选项卡中是否有多个RichTextBox控件?...或多个选项卡,每个选项卡都包含一个或多个RichTextBoxes? scintilla变量来自哪里? –

回答

0

RowCount是使用错误的属性,因为它返回行数而不是制表符。例如。你可以有6个标签,但RowCount可能仍然只有1,如果选项卡窄和控制范围广。

首先,您是否想要枚举全部页面的TabControl?如果是这样的话,在你for循环使用TabCountRowCount

for (int i = 0; i < tabControl1.TabCount; i++) 

如果你只想使用当前选项卡,然后摆脱循环的,只是使用tabControl1.SelectedTab

其次,尝试获取RichTextBox的行永远不会工作。 A TabControl只能主机TabPage实例,并试图通过Controls属性访问RichTextBox实例根本无法工作。您需要先获取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]; 

希望这会有所帮助。

相关问题