根据 ComboBox 选择将特定 ListBox 控件的内容保存到文本文件

Saving content of particular ListBox control to text file depending on ComboBox selection

我的应用程序中有两个 ListBox 控件和一个用于将其保存到文本文件的按钮。但是我想 select 使用 ComboBox 将其中一个保存到文本文件中。以下代码说明了我正在尝试做的事情:

private void button4_Click(object sender, EventArgs e)
{
    var ss = listBox1.Items;//first listbox
    var sb = listBox2.Items;//second listbox        

    SaveFileDialog svl = new SaveFileDialog();
    svl = saveFileDialog1;
    svl.Filter = "txt files (*.txt)|*.txt";
    if (svl.ShowDialog() == DialogResult.OK)
    {
        using (FileStream S = File.Open(saveFileDialog1.FileName, FileMode.CreateNew))
            using (StreamWriter st = new StreamWriter(S))
                foreach (string a in ss) // In here i want set which lisbox I want to save
                    st.WriteLine(a.ToString());
    }
}

什么是解决问题的好方法?

如果您添加一个包含两个项目的组合框,Listbox1 和 Listbox2,以下代码将保存组合框中所选列表框中的项目。

如您所见,我添加了一个 items 类型为 ObjectCollection 的局部变量,然后使用 switch 语句将其分配给该变量。

    private void button4_Click(object sender, EventArgs e)
    {
        ObjectCollection items = null;
        switch (combobox1.Text) {
           case "ListBox1":
                items = listBox1.Items;
           break;
           case "ListBox2":
                items = listBox2.Items;
           break;
           default:
               throw new Exception("no selection");
           break;
        }

        SaveFileDialog svl = new SaveFileDialog();
        svl = saveFileDialog1;
        svl.Filter = "txt files (*.txt)|*.txt";
        if (svl.ShowDialog() == DialogResult.OK)
        {
            using (FileStream S = File.Open(saveFileDialog1.FileName, FileMode.CreateNew))
            using (StreamWriter st = new StreamWriter(S))
                foreach (string a in items) //the selected objectcollection 
                    st.WriteLine(a.ToString());
        }

如果您没有对列表框的引用,您可以将表单上的列表框动态添加到表单加载事件中的组合框,如下所示:

foreach(var ctl in this.Controls)
{
    if (ctl is ListBox)
    {
        var lb = (ListBox) ctl;
        this.comboBox1.Items.Add(lb.Name);
     }
}

要在单击“保存”时找到正确的列表框,请将切换命令替换为这一行:

 var items = ((ListBox) this.Controls[combobox1.Text]).Items;

您可能想检查 combobox1.Text 是否为空或空,但我将其留作 reader.

的练习