我想在C#中的comboBox中添加复选框。我的目的是用户可以从一个ComboBox中选择多个值(全部选中并取消全部选中)。
请帮助
答案 0 :(得分:7)
您必须通过提供自己的渲染策略来扩展ComboBox控件,并“手动”添加CheckBox。
这些开源项目已经可以使用了:
http://www.codeproject.com/KB/combobox/CheckComboBox.aspx http://www.codeproject.com/KB/combobox/extending_combobox.aspx
答案 1 :(得分:3)
恕我直言,这是ComboBox控件的错误用法,因为用户无法看到他的选择。 对于多个选择,我建议您考虑CheckedListBox控件 link to MSDN
答案 2 :(得分:0)
我在http://dropdowncheckboxes.codeplex.com/有一个ASP.NET开源控件,我已经习惯并且非常满意。在http://www.codeproject.com/KB/combobox/extending_combobox.aspx还有一个WinForms开源控件看起来不那么强大,但也许有人可以结合两者的优点。如果实施得当,这对您的工具包来说真的是一个很好的补充。以上两个实现显示了所选的所有项目,并在缩小的区域中为您提供了许多相关的复选框,并具有出色的分组。我对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();
}