2012-05-11 93 views
10

在我的CheckedListBox應用程序中,我想只允許檢查一個項目。CheckedListBox只允許檢查一個項目

我有這些屬性已經設置

checkOnClick = true; 
SelectionMode = One; 

任何建議將理解

+4

將一組單選按鈕不適合更好嗎? – musefan

+1

首先[google](https://www.google.com/search?source=ig&hl=de&rlz=1G1ACAW_DEDE443&q=CheckListBox++only+one+item&oq=CheckListBox++only+one+item&aq=f&aqi=&aql=&gs_l= igoogle.3 ... 67628.71513.0.71707.17.5.1.11.0.0.261.587.3j1j1.5.0 ... 0.0.4BbfKlsCIQk)hit:http://social.msdn.microsoft.com/Forums/en-US/winforms/ thread/5333cdf2-a669-467c-99ae-1530e91da43a/ –

+0

看起來CheckedListBox繼承了ListBox的SelectionMode,但忽略了該屬性。 – akatakritos

回答

25

取消選中ItemCheck事件中的所有其他項目如下:

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) { 
     for (int ix = 0; ix < checkedListBox1.Items.Count; ++ix) 
     if (ix != e.Index) checkedListBox1.SetItemChecked(ix, false); 
    } 
+0

謝謝,我認爲肯定有一個簡單的財產,會做。 – Ahmed

+1

更簡單的是單選按鈕,客戶習慣於單選按鈕只是一種選擇,而複選框是多項選擇,在你像這樣強制更改 – RhysW

+0

@ Sam1之前要非常小心,它解決了問題。謝謝 – Ahmed

6

做到這一點的最好辦法是像這樣:

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) 
{ 
    if (e.NewValue == CheckState.Checked && checkedListBox1.CheckedItems.Count > 0) 
    { 
     checkedListBox1.ItemCheck -= checkedListBox1_ItemCheck; 
     checkedListBox1.SetItemChecked(checkedListBox1.CheckedIndices[0], false); 
     checkedListBox1.ItemCheck += checkedListBox1_ItemCheck; 
    } 
} 

沒有循環總是更好。