如何从列表框中保存

本文关键字:保存 列表 | 更新日期: 2023-09-27 18:05:43

我正在尝试将列表框中的项目保存到文件中;我试过用

之类的东西
  • listbox.items
  • listbox.items.addrange
  • listbox.items.count
  • listbox.items.text(这不会给我一个错误,但它也不保存)

代码如下:

private void button2_Click(object sender, EventArgs e)
{
   if (saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
   {
       File.WriteAllText(saveFileDialog1.FileName, listBox1.Items.Count);
   }
}

如何从列表框中保存

File.WriteAllText期望有两项:一个文件路径和要写入的字符串(作为String):

你给了它:

  1. 列表框。项目(一个集合)
  2. ListBox.Items。AddRange (a函数)
  3. ListBox.Items。计数(有效,但与实际项目无关,因为它只是计数)
  4. ListBox.Items。文本(什么????)(这可能不会编译,因为我不知道那个属性)

你需要遍历所有的项,如果你真的想使用File.WriteAllText,把它们都连接起来。

类似:

File.WriteAllText(saveFileDialog1.FileName, String.Join(",", listBox1.Items));
//If the above doesn't do the cast implicitly, and its always better to be explicit!
File.WriteAllText(saveFileDialog1.FileName, String.Join(",", listBox1.Items.Cast<string>()));

字符串。加入

当然,还有许多其他方法可以生成输出,但它的缺点是您需要迭代Items集合中的每个元素并将其单独写入文件,或者使用String.Join之类的函数一次性完成所有操作。

您可以遍历条目并创建一个包含所有条目的字符串,然后将该字符串写入文件。

string itemString = "";
foreach (Item item in listbox1.Items)
{
    itemString+=item.Text;
}
File.WriteAllText(saveFileDialog1.FileName, itemString);

您可能希望在每个条目中添加某种分隔符,逗号或换行符或其他东西,以便文件看起来不像胡言乱语

保存listBox中的项目:

private void SaveItems()
{
    using(StreamWriter sw = new StreamWriter("file.txt"))
    {
        for (int i = 0; i < listBox1.Items.Count; i++)
        {
            sw.WriteLine(listBox1.Items[i]);
        }
    }
}

将项目加载到listBox:

private void LoadItems()
{
    using(StreamReader sr = new StreamReader("file.txt"))
    {
        while (!sr.EndOfStream)
        {
            listBox1.Items.Add(sr.ReadLine());
        }
    }
}

如果您想将ListBox中的每个项存储到一个文件中,那么最好使用File.WriteAllLines(String, String[])

File.WriteAllLines(saveFileDialog1.FileName, 
    listBox1.Items.OfType<ListViewItem>().Select(i => i.Text).ToArray());