将选中的Form1.checkBox导出为Form2.listBox

时间:2016-04-25 15:43:14

标签: c#

我的表单设计有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);
   }
}

2 个答案:

答案 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