2011-12-28 42 views
0

我有一個小程序,在VS2010中有幾個checkedbox列表。我想允許用戶向所有在列表中選擇一個,並與該循環結構上來......C#全選CheckedListBox而不顯示「Check All」條目

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); 
      } 
     } 

    } 

問題是這樣還提出了「全選」複選框到輸出。有沒有一種方法可以調整循環,使其不包含第一個複選框(即「全選」檢查),還是應該以不同的方式進行操作?

+0

抱歉,您的問題是? – 2011-12-28 19:45:19

回答

1

很不清楚什麼「進入輸出」可能意味着什麼。使用SelectedIndexChanged事件不太合適,ItemCheck事件會檢查一個項目。如果你想使用的SelectedIndexChanged反正當時仍保持這個事件處理程序,以防止越來越檢查項目

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 
     } 
    } 

:試試這個。

+0

對不起,我應該包含我的itemcheck事件。我編輯了示例代碼來展示這一點。輸出存儲在列表集合中,然後通過電子郵件發送出一個不同的類。 – 2boolORNOT2bool 2011-12-28 19:54:52

+0

這是完美的!我拿出了我的SelectIndexChanged,並將此代碼添加到了我的ItemCheckEvent中,它的工作原理絕對完美。謝謝一堆。我很新,一直困在這一點。再次感謝! – 2boolORNOT2bool 2011-12-28 20:06:26