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

时间:2015-04-05 09:00:48

标签: c# listbox

我的应用程序中有两个ListBox控件和一个将其保存到文本文件的按钮。但是我想选择一个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());
    }
}

对这个问题有什么好处?

1 个答案:

答案 0 :(得分:1)

如果你添加一个包含两个项目的组合框,Listbox1和Listbox2,下面的代码将保存在Combobox中选择的列表框中的项目。

正如您所看到的,我添加了一个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());
        }

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

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

要在单击“保存”时找到正确的列表框,请使用以下单行替换switch命令:

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

你可能想检查一下combobox1.Text是emtpy还是null,但我把它作为读者练习。