2011-05-11 226 views
8

我想在C#中的組合框內添加複選框。我的目的是用戶可以從一個ComboBox中選擇多個值(全部選中並全部取消選中)。如何在c#中的組合框內添加複選框

請幫助

+1

你是如此受限於這樣的空間嗎?會有多少個複選框? – ariel 2011-05-11 07:04:58

+0

@ariel:我想從數據庫中綁定。 – 2011-05-11 07:06:33

+4

這真的不是一個好主意。用戶不希望看到組合框中的複選框。使用明確爲此設計的其他控件之一,如'CheckedListBox'或甚至更好的'ListView'。 – 2011-05-11 07:08:48

回答

2

恕我直言,這是ComboBox控件的錯誤使用,因爲用戶沒有可能看到他的最佳的選擇。 對於多重選擇,我建議你考慮CheckedListBox控件 link to MSDN

0

有一個在http://dropdowncheckboxes.codeplex.com/一個ASP.NET開源控件,我已經使用和非常滿意。在http://www.codeproject.com/KB/combobox/extending_combobox.aspx上也有一個WinForms開源控件,它看起來不那麼強壯,但也許有人可以將兩者中的最好結合起來。如果執行得當,這對你的工具包來說是一個很好的補充。上述2個實現顯示了所選的所有項目,並在縮小的區域中給出了一些相關的複選框,並具有出色的分組。我對ASP.NET版本的補充是,如果檢查文件的時間太長,只允許使用文件名而不是完整路徑。請參閱上面的鏈接完整的代碼。下面是我的補充,在你的回發處理程序中被稱爲代替UpdateSelection:

// Update the caption assuming that the items are files 
// If the caption is too long, eliminate paths from file names 
public void UpdateSelectionFiles(int maxChars) { 
    StringBuilder full = new StringBuilder(); 
    StringBuilder shorter = new StringBuilder(); 
    foreach (ListItem item in Items) { 
    if (item.Selected) { 
     full.AppendFormat("{0}; ", item.Text); 
     shorter.AppendFormat("{0}; ", new FileInfo(item.Text).Name); 
    } 
    } 
    if (full.Length == 0) Texts.SelectBoxCaption = "Select..."; 
    else if (full.Length <= maxChars) Texts.SelectBoxCaption = full.ToString(); 
    else Texts.SelectBoxCaption = shorter.ToString(); 
}