2012-05-14 20 views
1

linqがチェックボックスを選択するかどうかを確認することができます。グループボックス内のLINQによるチェックボックスのチェック

私は

btnAgree.Enabled = (from chkbox in Controls.OfType<CheckBox>() select chkbox).Count(b => b.Checked) >= 2; 

のようなコードを得たが、私は私の勝利フォームに多くのチェックボックスを持っているように、私のシナリオがあるが、私は私のグループボックス内の任意のチェックボックスをチェックしたいLINQによって選択されます。それは可能ですが、私はまだ方法が見つかりませんでした。コードで私を助けてください。

少し似ている少しのコードがあります。コードはよう

public static IEnumerable<T> AllControls<T>(this Control startingPoint) where T : Control 
{ 
bool hit = startingPoint is T; 
if (hit) 
{ 
    yield return startingPoint as T; 
} 
foreach (var child in startingPoint.Controls.Cast<Control>()) 
{ 
    foreach (var item in AllControls<T>(child)) 
    { 
     yield return item; 
    } 
} 

}

var checkboxes = control.AllControls<CheckBox>(); 
var checkedBoxes = control.AllControls<CheckBox>().Where(c => c.Checked); 

が、どのようにそれは私のすべてのチェックボックスが配置されているグループボックスで動作するこのコードをカスタマイズするに従います。ご案内ください。別の問題は、私はC#v2.0を使用しています。ありがとう

+0

** Count(b => b.Checked)> 0 **を使用するだけで何が問題になりますか? – McGarnagle

答えて

4
btnAgree.Enabled = 
    (from chkbox in groupBox1.Controls.OfType<CheckBox>() 
    select chkbox).Count(b => b.Checked) >= 2; 

フォームのコントロールを確認しています。あなたは、フォームのコントロールコレクションを使用する必要はありません

4

、あなたの代わりにあなたのGroupBox' control collectionを使用することができます。

btnAgree.Enabled = GroupBox1.Controls.OfType<CheckBox>() 
        .Where(chk => chk.Checked) 
        .Count() >= 2; 
1

をあなたは再帰を必要とする場合(あなたのGroupBox内のパネルを持って想像して、チェックボックスがパネルに追加されました

:)、私はあなたの拡張メソッドは、まだ

はビット

public static IEnumerable<T> AllControls<T>(this Control startingPoint) where T : Control 
     { 
      if (startingPoint is T) 
       yield return startingPoint as T; 

      foreach (var item in startingPoint.Controls.Cast<Control>().SelectMany(AllControls<T>)) 
       yield return item; 
     } 

使用状況を変え便利だと思います

var list = groupBox1.AllControls<CheckBox>(); 
var listChecked = list.Where(m => m.Checked); 
関連する問題