我的表单设计有5个复选框。我将它们称为Bus1,Bus2 ...... Bus5。
我有"编辑"调出带有listBox的Form2的按钮。
当我按下"编辑"按钮,我只想选中复选框并将它们放在listBox中。
我正在考虑检查单个复选框,如果为true,则将它们添加到列表中。
private void button1_Click(object sender, EventArgs e)
{
if(checkBox1.Checked==true)
{
form2.listBox1.Items.Add("checkBox1.Text");
}
if(checkBox2.Checked==true)
{
...
}
...
}
这是正确的方式还是有更好的方法?
由于
编辑--------------------------------------
private void button1_click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.Show();
foreach(var checkBox in this.Controls.OfType<CheckBox>().Where(c=>c.Checked))
{
form2.listBox1.Items.Add(checkBox.Text);
}
}
答案 0 :(得分:2)
如果您需要表单上的所有复选框,这应该有效:
foreach (var checkBox in this.Controls.OfType<CheckBox>().Where(c => c.Checked))
{
form2.listBox1.Items.Add(checkBox.Text);
}
如果您还需要有关字符串"checkBox1.Text"
等复选框变量名称的信息,可以考虑创建Tuple<string,CheckBox>[]
或Dictionary<string,CheckBox>
并使用nameof
填充它。
编辑:还有一个没有foreach
循环的版本,但它会导致创建冗余数组:
form.listBox1.Items.AddRange(this.Controls.OfType<CheckBox>()
.Where(c => c.Checked)
.Select(c => c.Text)
.ToArray<object>());
答案 1 :(得分:2)
您需要在填充列表框的Form2
中公开一个公共方法
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public void PopulateListBox(params CheckBox[] checkboxes)
{
foreach(var item in checkboxes.Where((cb) => cb.Checked))
{
listBox1.Items.Add(item.Text);
}
}
}
然后从Form1
调用此方法,并使用您想要的复选框作为参数
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 form2=new Form2();
form2.Show();
form2.PopulateListBox(
checkBox1,
checkBox2,
checkBox3,
checkBox4,
checkBox5);
}
}
这样您可以选择要在支票中包含哪些方框。如果需要全部,则上述内容类似地编码为:
public void PopulateListBox(IEnumerable<CheckBox> checkboxes)
{
foreach(var item in checkboxes.Where((cb) => cb.Checked))
{
listBox1.Items.Add(item.Text);
}
}
和
form2.PopulateListBox( Controls.OfType<CheckBox>() );
谢谢@Andrey Tretyak