2016-06-13 7 views
1

내 질문은 간단하지만 그렇게 할 방법이 없습니다.체크 박스의 조건

나는 여러 checkboxs을 가지고, 나는 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 
     } 
} 

내가 하나의 확인란이 선택되어 있는지 확인하는 데 사용하는 트릭 확인하는 경우에만 내 공백을 실행하려면 ..하지만 내가 원하는 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; 
} 

두 번째 버전은 배열에 추가하기 만하면 더 많은 확인란을 쉽게 확장 할 수 있습니다. 양식 심지어 모든 체크 박스 카운트 않는 경우


, 당신은

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