2016-04-25 4 views
1

5つのチェックボックスを持つフォームデザインがあります。私はそれらをBus1、Bus2 ... Bus5と呼ぶでしょう。エクスポートチェックForm1.checkBoxesからForm2.listBox

私は、リストボックスを持つForm2を表示する「編集」ボタンがあります。

"編集"ボタンを押すと、チェックボックスだけを取り出してlistBoxに入れたいと思っています。

私は個々のチェックボックスをチェックして、本当であればそれらをリストに追加することを考えていました。

private void button1_Click(object sender, EventArgs e) 
{ 
    if(checkBox1.Checked==true) 
    { 
     form2.listBox1.Items.Add("checkBox1.Text"); 
    } 
    if(checkBox2.Checked==true) 
    { 
     ... 
    } 
    ... 
} 

これは正しい方法ですか、それとも良い方法がありますか?

おかげ

編集--------------------------------------

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を使用することができます:あなたは、フォーム上のすべてのチェックボックスを必要とする場合、これは動作するはず

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でパブリックメソッドを公開する必要があります。

0123をパラメータとして
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ループなしのバージョンが、それは冗長アレイの作成になります:

form.listBox1.Items.AddRange(this.Controls.OfType<CheckBox>() 
            .Where(c => c.Checked) 
            .Select(c => c.Text) 
            .ToArray<object>()); 
関連する問題