2011-05-11 208 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(); 
}