C#中comboBox下拉框中實現多選
譯者注:本方法和用checkbox, listbox等控制元件和事件拼湊出來的不同,本方法基本實現了控制元件的順滑度,下拉框可懸浮等效果,可以認為是comboBox的升級版,使用方便,僅需引用編譯好的DLL,直接在toolBox拖拽出控制元件即可。
簡介
在工作中,我需要用一個佔地方很小的控制元件,來實現很大空間的下拉選擇。顯然,我們首先想到的是用CheckBoxComboBox
control來代替一組的checkbox,網上有很多這樣的方法,但是都有或多或少的缺點。
有些做法只是假裝在Popup中畫了個check
box,所以這個假的checkbox並沒有完整的checkbox的屬性,當用戶想要選擇更多的選項時,Popup
現在我要介紹的這個CheckBoxComboBox
控制元件,是完全集成了.net的ComboBox
和CheckBox
es,我建立了一個wrapper
用來存放ComboBox.Items,而不是用現有的CheckBoxListBox 。另一點需要特別提到的是,我還是使用的Lukasz
Swiatkowski提供的PopUp 解決方案,他解決了普通的PopUp
存在的問題,比如自定義大小,位置,焦點控制等。
背景:
本自定義控制元件CheckBoxComboBox
提供了一個CheckBoxItems
CheckBox
es。控制元件提供了一個CheckBoxCheckedChanged
事件,可以實現把選中的專案在下拉列表中勾選出來。
使用步驟:
原文中沒有STEP BY STEP的提到如何使用,但我想大家想知道的肯定只想知道如何實現圖片所要達到的效果,那麼我們快速的來使用吧。
1)下載原始碼;
我在資源裡也上傳了一份
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個選項,這個我還沒有找到方法,原文裡也是有人提問過,但原作者沒有回答,感興趣的朋友可以試著看看原始碼看有沒有方法。