您的位置:首页 > 编程语言 > C#

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拖拽出控件即可。



简介

在工作中,我需要用一个占地方很小的控件,来实现很大空间的下拉选择。显然,我们首先想到的是用
CheckBoxComboBox
control来代替一组的checkbox,网上有很多这样的方法,但是都有或多或少的缺点。

有些做法只是假装在Popup中画了个check
box,所以这个假的checkbox并没有完整的checkbox的属性,当用户想要选择更多的选项时,Popup已经关闭了;还有一种方法呢,又没有正常ComboBox的属性,比如你不能绑定数据源给他。

现在我要介绍的这个
CheckBoxComboBox
控件,是完全集成了.net的ComboBox
CheckBox
es,我创建了一个wrapper
用来存放ComboBox.Items,而不是用现有的CheckBoxListBox 。另一点需要特别提到的是,我还是使用的Lukasz
Swiatkowski提供的PopUp 解决方案,他解决了普通的
PopUp
存在的问题,比如自定义大小,位置,焦点控制等。

背景:

本自定义控件
CheckBoxComboBox
提供了一个
CheckBoxItems
属性,即在ComboBox 的下拉选项显示为
CheckBox
es。控件提供了一个
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个选项,这个我还没有找到方法,原文里也是有人提问过,但原作者没有回答,感兴趣的朋友可以试着看看源码看有没有方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: