2017-10-07 4 views
0

TabPageにあるすべてのRichTextBoxのすべてのテキストを書き込むコードがあります。問題は、テキストを保存しないことです。TabControlの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

パスを構築するには、['Path.Combine'](https://msdn.microsoft.com/en-us/library/fyy7a5kt(v = vs.110).aspx)を使用することを検討してください。 –

+0

あなたがしていることを本当に述べているわけではないので、あなたの質問は特に明白ではないと思います。コードスニペットから何が集められるかを教えてください。 'TabControl'の内容がどのように設定されているのか、コードが何を期待しているのか、といった具合です。すべてのタブ、現在のタブなどの内容を保存します。 –

+0

1つのタブに複数のリッチテキストボックスコントロールがありますか?...複数のタブがあり、それぞれに1つ以上のリッチテキストボックスがありますか? 'scintilla'変数はどこから来ていますか? –

答えて

0

RowCountそれは行ではなく、タブの数を返しとして使用する間違ったプロパティです。例えば。 6つのタブを持つことができますが、タブの幅が狭く、コントロールの幅が広い場合は、RowCountが1になることがあります。

まず、あなたはTabControlすべてページを列挙しようとしていますか?その場合は、あなたが現在のタブのみを使用したい場合は、ないRowCount

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

、あなたのforループでTabCountを使用し、その後、ループを取り除くだけtabControl1.SelectedTabを使用しています。

第2に、RichTextBoxを取得しようとしている回線は、決して動作しません。 TabControlTabPageインスタンスのみをホストでき、Controlsプロパティを介してRichTextBoxインスタンスにアクセスしようとすると、単に動作しません。 TabPageを最初に取得し、その上にコントロールを列挙してRichTextBoxを見つけ出すか、ページあたり1つのコントロールしかない場合は、直接アクセスする必要があります。

RichTextBox richText = tabControl1.TabPages[i].Controls[0] as RichTextBox; 

あなたはusingブロックがprojectFileにコンテンツを書くためにすることを持っている理由私は全然わからない - ちょうどFile.WriteAllTextへの呼び出しによって上書き取得するつもりです。

手作業でパスを結合することは悪いことです。たとえば、Path.Combineを使用してみてください。 Path.Combine(projectPathFolder, projectName, projectName + ".project");

編集:他の1点。 as RichTextBoxを使用しています。これは通常、キャストが有効でない可能性があることを受け入れ、nullを返します。しかし、あなたはその結果を明示的にnullチェックしていません。障害が予想される場合は、File.WriteAllTextステートメントをヌルチェックで囲みます。失敗が予想されない場合は、キャストを明示的にして、キャスト時点でクラッシュさせてください。

RichTextBox richText = (RichTextBox)tabControl1.TabPages[i].Controls[0]; 

これが役に立ちます。

関連する問題