2016-04-25 39 views
1

我有一個包含5個複選框的表單設計。我會給他們打電話Bus1,Bus2 ... Bus5。將選中的Form1.checkBoxes導出到Form2.listBox

我有「編輯」按鈕,調出具有listBox的Form2。

當我按下「編輯」按鈕時,我只想將選中的框放入列表框中。

我在考慮檢查單個複選框,如果爲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

您需要在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

+0

以中,我們需要所有複選框在形式上可以調用帳戶函數'PopulateListBox'像這樣:'form2.PopulateListBox(this.Controls.OfType ())'。並且替換'IEnumerable '上的輸入參數將防止創建將爲'param'參數創建的冗餘數組。 –

+0

我去了用戶選擇哪些複選框的情況下不應該包含_all_的靈活性。 – ja72

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 FO填充它。

編輯:有還無foreach循環的一個版本,但它會導致創建冗餘陣列:

form.listBox1.Items.AddRange(this.Controls.OfType<CheckBox>() 
            .Where(c => c.Checked) 
            .Select(c => c.Text) 
            .ToArray<object>());