我的应用程序中有两个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());
}
}
对这个问题有什么好处?
答案 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,但我把它作为读者练习。