2012-09-22 3 views
0

C#으로 Windows Form 응용 프로그램을 만들고 있습니다.여러 그룹 상자를 검색 가능한 단일 변수로 결합

내 양식 중 하나에 5 개의 그룹 상자가 있으며 각 그룹에는 6 개의 체크 박스가 있습니다. 확인란을 모두 선택해야합니다. 다음과 같이 내가 코딩 한 순간

: 나는 위의 5 번 반복 한 후 답을 얻기 위해서 함께 모든 변수를 추가해야하지만

int NumOfRacks1 = groupBoxPace.Controls.OfType<CheckBox>() .Count(cb => cb.Checked);

. 코드를 자르는 더 똑똑한 방법이있을 것이라고 확신합니다.

var allRacks = groupBoxSamsung.Controls.OfType<CheckBox>().Concat(groupBoxPace.Controls.OfType<CheckBox>().Concat(groupBox780.Controls.OfType<CheckBox>()));

을하지만 예상대로이 작동하지 않았다 다음과 같이

나는 그들 중 세 가지를 결합했습니다.

누구나이 방법을 알고 있습니까?

+0

* 그러나 예상대로 작동하지 않았습니다. * 어떻게 되었습니까? – McGarnagle

+2

정말 죄송합니다. 다시 시도해 보았습니다. 처음으로 내가 무엇을했는지 모르겠습니다. – user1681394

답변

0

확인란을 모두 선택해야합니다.

세지 않기 때문에 작동하지 않습니다. 이 시도.

var items = (groupBox1.Controls.OfType<CheckBox>() 
    .Concat(groupBox2.Controls.OfType<CheckBox>())) 
    .Where(ch => ch.Checked == true).Count(); 

여기에 개수가 있습니다.

+0

감사합니다 Randolf. 어쨌든 내 코드는 작동하는 것처럼 보이지만 더 명확 해 보이는 것처럼 나는 사용자 코드로 전환 할 수 있습니다. – user1681394

0

StackOverflow How to get all childControls of a type on a form에 대한 질문이 발견되어 으로 확장하여 검사 된 요소 인을 계산합니다. 일반적으로

private void button1_Click(object sender, EventArgs e) 
{ 
    label1.Text = (from c in GetAll(this, typeof(CheckBox)) 
        where (c as CheckBox).Checked 
        select c).Count().ToString();      
} 
// credits go to @PsychoCoder for this part 
public IEnumerable<Control> GetAll(Control control, Type type) 
{ 
    var controls = control.Controls.Cast<Control>(); 
    return controls.SelectMany(ctrl => GetAll(ctrl, type)) 
           .Concat(controls) 
           .Where(c => c.GetType() == type); 
} 

나는이 조각이 트릭을 할해야한다고 생각하고 모든 groupBoxes을 CONCAT 필요가 없습니다 ! 체크 박스가 childControls 또는하지 않은 경우

편집 수에 적응

는 모든 양식에 확인란을 상관없이를 확인했습니다.

Type type = typeof(CheckBox); 
var controls = this.Controls.Cast<Control>(); 
label1.Text = controls.SelectMany(ctrl => GetAll(ctrl)) 
          .Concat(controls) 
          .Where(c => c.GetType() == type && (c as CheckBox).Checked) 
          .Count().ToString(); 
관련 문제