2011-12-28 2 views
0

VS2010에 여러 개의 체크 박스 목록이있는 작은 프로그램이 있습니다. 나는C# "모두 확인"항목을 표시하지 않고 CheckedListBox에서 모두 확인

private void CheckedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) 
    { 
     if (e.NewValue == CheckState.Checked) 
     { 
      Applications.Add(CheckedListBox1.Items[e.Index].ToString()); 
     } 
     else if (e.NewValue == CheckState.Unchecked) 
     { 
      Applications.Remove(CheckedListBox1.Items[e.Index].ToString()); 
     } 
    } 

private void CheckedListBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 

     if (CheckedListBox1.SelectedIndex == 0) 
     { 
      for (int i = 1; i < CheckedListBox1.Items.Count; i++) 
      { 
       CheckedListBox1.SetItemChecked(i, CheckedListBox1.GetItemChecked(0)); 
      } 
     } 
     else 
     { 
      if (!CheckedListBox1.GetItemChecked(CheckedListBox1.SelectedIndex)) 
      { 
       CheckedListBox1.SetItemChecked(0, false); 
      } 
     } 

    } 

문제는이 또한 출력에 "모두 선택"체크 상자를두고있다 ... 사용자가 모든 목록 중 하나를 선택할 수 있도록 원이 루프 구조를 내놓았다. 첫 번째 확인란 ("Select All"Check)을 포함하지 않도록 루프를 조정할 수있는 방법이 있습니까? 아니면 다른 방식으로해야합니까?

+0

죄송합니다. 귀하의 궁금한 점은 무엇입니까? –

답변

1

"출력으로"무엇을 의미하는지 꽤 명확하지 않습니다. SelectedIndexChanged 이벤트를 사용하는 것은 적절하지 않지만 ItemCheck 이벤트는 항목을 검사하는 신호입니다. 대신이 시도 :

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) { 
     if (e.Index == 0) { 
      for (int item = 1; item < checkedListBox1.Items.Count; item++) { 
       checkedListBox1.SetItemChecked(item, true); 
      } 
      e.NewValue = CheckState.Unchecked; // Prevent "Check All" from getting checked 
     } 
    } 

당신이 다음 아직 확인하기에서 항목을 방지하기 위해이 이벤트 핸들러를 유지 어쨌든의 SelectedIndexChanged 사용합니다.

+0

죄송합니다. itemcheck 이벤트를 포함해야합니다. 이것을 보여주기 위해 예제 코드를 편집했다. 출력물은 목록 컬렉션에 저장되고 다른 클래스를 사용하여 이메일로 발송됩니다. – 2boolORNOT2bool

+0

이것은 완벽합니다! SelectIndexChanged를 꺼내서이 코드를 ItemCheckEvent에 추가 했으므로 완벽하게 작동합니다. 무리 감사. 나는 아주 새롭고 잠시 동안 이것에 붙어 있습니다. 다시 한 번 감사드립니다! – 2boolORNOT2bool

관련 문제