web-dev-qa-db-ja.com

C#リストボックス内のすべてのアイテムをテキストファイルに保存する

最近、私はC#をかなり楽しんでいて、それを使ってテストしているだけですが、得られない部分があるようです。

基本的には、[保存]ボタンをクリックしたときに、リストボックス内のすべてのアイテムをテキストファイルに保存する必要があるようにします。現時点では、ファイルに含まれているのは_System.Windows.Forms.ListBox+ObjectCollection_だけです。

これが私がこれまでに得たものです。 SaveFile.WriteLine(listBox1.Items);の部分で、私は多くの異なるメソッドを入れようとしましたが、それを理解できないようです。また、私のプログラムの最終製品で、そのテキストファイルに読み返して、テキストファイルの内容をリストボックスに出力したいことも覚えておいてください。これが不可能な場合は、私の悪いことです。結局のところC#;)

_private void btn_Save_Click(object sender, EventArgs e)
{
    const string sPath = "save.txt";

    System.IO.StreamWriter SaveFile = new System.IO.StreamWriter(sPath);
    SaveFile.WriteLine(listBox1.Items);
    SaveFile.ToString();
    SaveFile.Close();

    MessageBox.Show("Programs saved!");
}
_
8
SirTiggs

あなたのコードから

SaveFile.WriteLine(listBox1.Items);

あなたのプログラムは実際にこれを行います:

_SaveFile.WriteLine(listBox1.Items.ToString());
_

Itemsコレクションの.ToString()メソッドは、コレクションのタイプ名(_System.Windows.Forms.ListBox+ObjectCollection_)を返します。これは、メソッドがそうでない場合のデフォルトの.ToString()動作であるためです。オーバーライドされます。

意味のある方法でデータを保存するには、各アイテムをループして、必要な方法で書き込む必要があります。これがサンプルコードです。あなたのアイテムには適切な.ToString()実装があると仮定しています。

_System.IO.StreamWriter SaveFile = new System.IO.StreamWriter(sPath);
foreach(var item in listBox1.Items)
{
    SaveFile.WriteLine(item.ToString());
}
_
11
Ivaylo Slavov

Itemsはコレクションです。すべてのアイテムを繰り返し処理して、アイテムを保存する必要があります

private void btn_Save_Click(object sender, EventArgs e)
{
    const string sPath = "save.txt";

    System.IO.StreamWriter SaveFile = new System.IO.StreamWriter(sPath);
    foreach (var item in listBox1.Items)
    {
        SaveFile.WriteLine(item);
    }

    SaveFile.Close();

    MessageBox.Show("Programs saved!");
}
7
BRAHIM Kamel