2017-04-09 13 views
0

itemsListBox内のすべての項目をファイルに追加するために、このwhileループに何を入れる必要があるのか​​よく分かりません。今すぐ(writer.writelineの前にループがなくても)、最後の項目だけがファイルに追加されます。プログラムは、リストボックスに項目を追加してファイルに保存してから、プログラムを再オープンするときにロードします。また、リストボックス内の項目数を追跡するラベルもあります。複数の項目をファイルに追加する

private const string TO_DO_LIST = "to-do-list.txt"; 
public Form1() 
{ 
    InitializeComponent(); 
} 

private void enterButton_Click(object sender, EventArgs e) 
{ 
    AddItem();    
} 

private void AddItem() 
{ 
    itemsList.Items.Add(itemsBox.Text); 
    numberOfItemsLabel.Text = itemsList.Items.Count.ToString(); 
    SaveItem();   
} 

private void SaveItem() 
{ 
    StreamWriter writer = File.CreateText(TO_DO_LIST); 
    string newItem = itemsBox.Text; 

    while()//??? 
    { 
     writer.WriteLine(newItem); 
    } 

    writer.Close(); 
} 

private void Form1_Load(object sender, EventArgs e) 
{ 
    try 
    { 
     StreamReader reader = File.OpenText(TO_DO_LIST); 
     while (!reader.EndOfStream) 
     { 
      itemsList.Items.Add(reader.ReadLine()); 
     } 
    } 
    catch (FileNotFoundException ex) 
    {    
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
}  

答えて

0

あなたは、開いたり、ファイルを作成し、それにテキストを追加し、それを閉じますFile.AppendAllLinesを使用してちょうど1行、でそれを行うことができます。

最初の引数はファイルパスで、2番目の引数は追加する行のIEnumerableです。

ListBox.ObjectCollectionなのでAppendAllLinesメソッドを使用するにはに変換する必要があります。これはToList()と組み合わせるCast<string>()方法で行うことができます。

File.AppendAllLines(TO_DO_LIST, itemsList.Items.Cast<String>().ToList()); 
0

このようなことはありますか?

using (StreamWriter writer = File.CreateText(TO_DO_LIST)) 
{ 
    foreach (string text in itemsList.Items) 
    { 
     writer.WriteLine(text); 
    } 
}; 
+0

これは何とか何も変わりません、確かに私は本当に簡単な何かが欠けています –

関連する問題