C#中comboBox下拉框中实现多选
2013-05-27 13:13
4339 查看
原文地址:http://www.codeproject.com/Articles/21085/CheckBox-ComboBox-Extending-the-ComboBox-Class-and?msg=4535944#xx4535944xx
译者注:本方法和用checkbox, listbox等控件和事件拼凑出来的不同,本方法基本实现了控件的顺滑度,下拉框可悬浮等效果,可以认为是comboBox的升级版,使用方便,仅需引用编译好的DLL,直接在toolBox拖拽出控件即可。
简介
在工作中,我需要用一个占地方很小的控件,来实现很大空间的下拉选择。显然,我们首先想到的是用
有些做法只是假装在Popup中画了个check
box,所以这个假的checkbox并没有完整的checkbox的属性,当用户想要选择更多的选项时,Popup已经关闭了;还有一种方法呢,又没有正常ComboBox的属性,比如你不能绑定数据源给他。
现在我要介绍的这个
和
用来存放ComboBox.Items,而不是用现有的CheckBoxListBox 。另一点需要特别提到的是,我还是使用的Lukasz
Swiatkowski提供的PopUp 解决方案,他解决了普通的
背景:
本自定义控件
使用步骤:
原文中没有STEP BY STEP的提到如何使用,但我想大家想知道的肯定只想知道如何实现图片所要达到的效果,那么我们快速的来使用吧。
1)下载源码;
原文里可以直接下载http://www.codeproject.com/KB/combobox/extending_combobox/CheckBoxComboBox.zip
我在资源里也上传了一份
http://download.csdn.net/detail/babyqian84/5458185
2)编译DLL;
我使用的vs2008编译的,dll在2008,2010都可以使用,已经测试过。
上面的下载路径里面,原文地址下载的没有编译好的DLL,需要自己编译,我上传的资源中有dll,在\CheckBoxComboBox\CheckBoxComboBox\bin\Debug路径下,建议还是自己编译一下,项目中有源码和例子;
3)添加DLL到工具箱;
4)拖拽控件到你的窗口上;
5)用操作combobox相同的方法操作这个控件
6)扩展:增加全选功能
private void checkBoxComboBoxProd_CheckBoxCheckedChanged(object sender, EventArgs e)
{
if (checkBoxComboBoxProd.CheckBoxItems[0].Checked == true)
{
foreach (var item in checkBoxComboBoxProd.CheckBoxItems)
{
item.Checked = true;
}
checkBoxComboBoxProd.Text = "ALL";
}
else if (checkBoxComboBoxProd.SelectedIndex == 0)
{
foreach (var item in checkBoxComboBoxProd.CheckBoxItems)
{
item.Checked = false;
}
checkBoxComboBoxProd.Text = "";
}
else
{
checkedProd = "";
foreach (var item in checkBoxComboBoxProd.CheckBoxItems)
{
if (item.Checked == true)
{
checkedProd = checkedProd + "'" + item.Text + "',";
}
}
if (checkedProd.Length > 0)
checkedProd = checkedProd.Remove(checkedProd.Length - 1);
checkBoxComboBoxProd.Text = checkedProd;
}
}
7)遗留问题:控件弹出框的高度是可以调的,但是没有属性可以控制它的默认高度,目前空间的默认高度被设置为大概8个选项,但比如我想设置默认高度为20个选项,这个我还没有找到方法,原文里也是有人提问过,但原作者没有回答,感兴趣的朋友可以试着看看源码看有没有方法。
译者注:本方法和用checkbox, listbox等控件和事件拼凑出来的不同,本方法基本实现了控件的顺滑度,下拉框可悬浮等效果,可以认为是comboBox的升级版,使用方便,仅需引用编译好的DLL,直接在toolBox拖拽出控件即可。
简介
在工作中,我需要用一个占地方很小的控件,来实现很大空间的下拉选择。显然,我们首先想到的是用
CheckBoxComboBoxcontrol来代替一组的checkbox,网上有很多这样的方法,但是都有或多或少的缺点。
有些做法只是假装在Popup中画了个check
box,所以这个假的checkbox并没有完整的checkbox的属性,当用户想要选择更多的选项时,Popup已经关闭了;还有一种方法呢,又没有正常ComboBox的属性,比如你不能绑定数据源给他。
现在我要介绍的这个
CheckBoxComboBox控件,是完全集成了.net的ComboBox
和
CheckBoxes,我创建了一个wrapper
用来存放ComboBox.Items,而不是用现有的CheckBoxListBox 。另一点需要特别提到的是,我还是使用的Lukasz
Swiatkowski提供的PopUp 解决方案,他解决了普通的
PopUp存在的问题,比如自定义大小,位置,焦点控制等。
背景:
本自定义控件
CheckBoxComboBox提供了一个
CheckBoxItems属性,即在ComboBox 的下拉选项显示为
CheckBoxes。控件提供了一个
CheckBoxCheckedChanged事件,可以实现把选中的项目在下拉列表中勾选出来。
使用步骤:
原文中没有STEP BY STEP的提到如何使用,但我想大家想知道的肯定只想知道如何实现图片所要达到的效果,那么我们快速的来使用吧。
1)下载源码;
原文里可以直接下载http://www.codeproject.com/KB/combobox/extending_combobox/CheckBoxComboBox.zip
我在资源里也上传了一份
http://download.csdn.net/detail/babyqian84/5458185
2)编译DLL;
我使用的vs2008编译的,dll在2008,2010都可以使用,已经测试过。
上面的下载路径里面,原文地址下载的没有编译好的DLL,需要自己编译,我上传的资源中有dll,在\CheckBoxComboBox\CheckBoxComboBox\bin\Debug路径下,建议还是自己编译一下,项目中有源码和例子;
3)添加DLL到工具箱;
4)拖拽控件到你的窗口上;
5)用操作combobox相同的方法操作这个控件
CheckBoxComboBox,给它赋值;
6)扩展:增加全选功能
private void checkBoxComboBoxProd_CheckBoxCheckedChanged(object sender, EventArgs e)
{
if (checkBoxComboBoxProd.CheckBoxItems[0].Checked == true)
{
foreach (var item in checkBoxComboBoxProd.CheckBoxItems)
{
item.Checked = true;
}
checkBoxComboBoxProd.Text = "ALL";
}
else if (checkBoxComboBoxProd.SelectedIndex == 0)
{
foreach (var item in checkBoxComboBoxProd.CheckBoxItems)
{
item.Checked = false;
}
checkBoxComboBoxProd.Text = "";
}
else
{
checkedProd = "";
foreach (var item in checkBoxComboBoxProd.CheckBoxItems)
{
if (item.Checked == true)
{
checkedProd = checkedProd + "'" + item.Text + "',";
}
}
if (checkedProd.Length > 0)
checkedProd = checkedProd.Remove(checkedProd.Length - 1);
checkBoxComboBoxProd.Text = checkedProd;
}
}
7)遗留问题:控件弹出框的高度是可以调的,但是没有属性可以控制它的默认高度,目前空间的默认高度被设置为大概8个选项,但比如我想设置默认高度为20个选项,这个我还没有找到方法,原文里也是有人提问过,但原作者没有回答,感兴趣的朋友可以试着看看源码看有没有方法。
相关文章推荐
- 用easyUI的combobox实现多选下拉框
- c#多选下拉框(ComboBox)
- combobox实现下拉多选的终结解决方案
- jquery的combobox实现下拉多选
- 扩展Ext的Combobox实现多选下拉列表
- C# ComboBox实现不能输入,且下拉选框文本上有值
- C#中的ComboBox实现只能选择不能输入,且下拉框中有默认值。
- c#动态设置combobox控件下拉项宽度以实现下拉项文字可以完全显示。
- C# DataGridView中实现类似ComboBox可编辑的下拉框功能
- C# 重写ComboBox实现下拉任意组件的方法
- 扩展Ext的Combobox实现多选下拉列表
- C# DataGridView中实现类似ComboBox可编辑的下拉框功能
- 使用jquery-combobox实现select下拉框多选之后,如何将下拉框的值传给input隐藏域
- Visual Studio 2005的DataGridView控件中加入ComboBox下拉列表框的实现(C#)
- easyui-combobox下拉多选
- jquery实现下拉框多选方法介绍
- C# WPF下自定义ComboBox背景、边线、颜色等代码实现
- C#中怎么获取comboBox下拉列表选中项的Tag值
- C#里实现ComboBoxListBox
- C# 本地txt文件读取至comboBox下拉列表