2016-06-13 5 views
1

私の質問は非常にシンプルですが、私はそれを行う方法がありません。チェックボックスの条件

私は2それらの以上が

private void Button1_Click(object sender, EventArgs e) 
{ 

     if (!checkbox1.Checked && !checkbox2.Checked && !checkbox3.Checked &&  !checkbox4.Checked && !checkbox5.Checked) 
     { 
     Messagebox.Show("Select 2 checkbox"); 
     return; 
     } 
     else 
     { 
     //some action 
     } 
} 

をチェックされた場合にのみ、私のボイドを実行したい、いくつかのcheckboxsを持っているが、私は1つのチェックボックスがオンになっていることを確認するために使用トリック..ですしかし、私はしたいです2 &より多くのチェックボックスを使って同じことをする。

Ps:私はprivate void checkBox2_CheckedChanged()を使用できません。私のbutton1イベントを使用する必要があります。

答えて

6

あなたは確かにそのような確認のチェックボックスの数数えるできます

int count = 0; 
if (checkbox1.Checked) count += 1; 
if (checkbox2.Checked) count += 1; 
if (checkbox3.Checked) count += 1; 
if (checkbox4.Checked) count += 1; 

if (count < 2) 
{ 
    Messagebox.Show("Select 2 checkbox");  
    return; 
} 

をそれとも、アレイ内のすべての関連するチェックボックスを入れて、これを行うことができます。

CheckBox[] checkboxes = new [] { checkbox1, checkbox2, checkbox3, checkbox4 }; 
if (checkboxes.Count(cb => cb.Checked) < 2) 
{ 
    Messagebox.Show("Select 2 checkbox");  
    return; 
} 

2番目のバージョンは、単に配列に追加するだけで、さらに多くのチェックボックスを拡張できます。


フォーム上でもすべてのチェックボックスを数えるならば、あなたは

if(Controls.OfType<CheckBox>().Count(cb => cb.Checked) < 2) 
{ 
    // .... 
} 
+0

...または '場合(Controls.OfType ().Count(CB => cb.Checkedを使用することができます)> = 2) '... –

+0

@ZoharPeled右、私は何とかそのような' Count() 'オーバーロードはなかったと思っていましたが、私は' Contains() 'と混同しました。 (ただし、 'Where()。Count()'は 'Count()'より速いはずですが、ここでは関係ないと思います)。 –

+0

@RenéVogt完璧、ありがとうございます! – jsls

関連する問題