public class MultiComboBox : UserControl
{
#region 屬性
public ComboBox ComboBox { get; set; }
public CheckedListBox CheckedListBox { get; set; }
public ComboBox.ObjectCollection Items
{
get
{
return ComboBox?.Items;
}
}
#endregion
/// <summary>
/// 多選下拉框
/// </summary>
public MultiComboBox()
{
// 面板
this.VerticalScroll.Enabled = true;
this.AutoSize = true;
// 多選列表
CheckedListBox = new CheckedListBox();
CheckedListBox.CheckOnClick = true;
CheckedListBox.BorderStyle = BorderStyle.Fixed3D;
CheckedListBox.Visible = false;
CheckedListBox.Margin = new Padding(0);
CheckedListBox.MouseUp += (ss, se) =>
{
// 更新ComboBox顯示文本
var lst = new List<string>();
foreach (var v in CheckedListBox.CheckedItems)
{
lst.Add(v.ToString());
}
ComboBox.Text = string.Join(",", lst);
ComboBox.Tag = lst;
};
CheckedListBox.MouseLeave += (ss, se) =>
{
// 隱藏下拉多選框
CheckedListBox.Hide();
};
// 下拉框
ComboBox = new ComboBox();
ComboBox.Width = 150;
ComboBox.DrawMode = DrawMode.OwnerDrawFixed;
ComboBox.IntegralHeight = false;
ComboBox.DroppedDown = false;
ComboBox.DropDownHeight = 1;
ComboBox.Margin = new Padding(0);
ComboBox.Location = new Point(0, 0);
ComboBox.DropDownStyle = ComboBoxStyle.DropDown;
ComboBox.AutoCompleteSource = AutoCompleteSource.ListItems;
ComboBox.MouseDown += (ss, se) =>
{
ComboBox.DroppedDown = false;
};
ComboBox.MouseLeave += (ss, se) =>
{
// 不在下拉區(qū)則隱藏下拉
var curMousePos = this.PointToClient(Control.MousePosition);
var downArea = CheckedListBox.Location;
if (curMousePos.X < downArea.X || curMousePos.X > (downArea.X + CheckedListBox.Width)
|| curMousePos.Y < downArea.Y || curMousePos.Y > (downArea.Y + CheckedListBox.Height))
{
CheckedListBox.Hide();
}
};
ComboBox.DropDown += (ss, se) =>
{
// 顯示下拉多選框
CheckedListBox.Items.Clear();
// 添加并設(shè)置選中項(xiàng)
var lastChecked = ComboBox.Tag as List<string>;
ComboBox.BeginUpdate();
foreach (var v in this.Items)
{
var ck = false;
if (lastChecked != null && lastChecked.IndexOf(v.ToString()) >= 0)
{
ck = true;
}
CheckedListBox.Items.Add(v, ck);
}
// 顯示下拉框
CheckedListBox.Width = ComboBox.Width;
CheckedListBox.ItemHeight = ComboBox.ItemHeight;
CheckedListBox.Size = new Size(ComboBox.DropDownWidth, this.Items.Count * 18);
CheckedListBox.Location = new Point(ComboBox.Left, ComboBox.Height);
this.Controls.Add(CheckedListBox);
CheckedListBox.Visible = true;
ComboBox.EndUpdate();
};
// 添加控件
this.Controls.Add(ComboBox);
}
}
winform MultiComboBox
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)锁保,“玉大人薯酝,你說(shuō)我怎么就攤上這事∷猓” “怎么了吴菠?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)浩村。 經(jīng)常有香客問(wèn)我做葵,道長(zhǎng),這世上最難降的妖魔是什么穴亏? 我笑而不...
- 正文 為了忘掉前任蜂挪,我火速辦了婚禮重挑,結(jié)果婚禮上嗓化,老公的妹妹穿的比我還像新娘。我一直安慰自己谬哀,他們只是感情好刺覆,可當(dāng)我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著史煎,像睡著了一般谦屑。 火紅的嫁衣襯著肌膚如雪驳糯。 梳的紋絲不亂的頭發(fā)上,一...
- 那天氢橙,我揣著相機(jī)與錄音酝枢,去河邊找鬼。 笑死悍手,一個(gè)胖子當(dāng)著我的面吹牛帘睦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播坦康,決...
- 文/蒼蘭香墨 我猛地睜開眼竣付,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了滞欠?” 一聲冷哼從身側(cè)響起古胆,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎筛璧,沒(méi)想到半個(gè)月后逸绎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡夭谤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年桶良,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沮翔。...
- 正文 年R本政府宣布榆鼠,位于F島的核電站纲爸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏妆够。R本人自食惡果不足惜识啦,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望神妹。 院中可真熱鬧颓哮,春花似錦、人聲如沸鸵荠。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至姨伤,卻和暖如春哨坪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背乍楚。 一陣腳步聲響...
- 正文 我出身青樓凌箕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親词渤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子牵舱,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 最終效果 本實(shí)例實(shí)現(xiàn)時(shí)主要用到了NotifyIcon控件的ShowBalloonTip方法。NotifyIcon控...
- 之前由于需要,使用了c#的winform寫了個(gè)桌面應(yīng)用高氮。后面我把 在此基礎(chǔ)上把頁(yè)面(UI)慧妄、業(yè)務(wù)層(BLL) 和數(shù)...
- 隨筆背景:在很多時(shí)候,很多入門不久的朋友都會(huì)問(wèn)我:我是從其他語(yǔ)言轉(zhuǎn)到C#開發(fā)的剪芍,有沒(méi)有一些基礎(chǔ)性的資料給我們學(xué)習(xí)學(xué)...
- 隨筆背景:在很多時(shí)候塞淹,很多入門不久的朋友都會(huì)問(wèn)我:我是從其他語(yǔ)言轉(zhuǎn)到C#開發(fā)的,有沒(méi)有一些基礎(chǔ)性的資料給我們學(xué)習(xí)學(xué)...
- 1罪裹、Winform數(shù)據(jù)訪問(wèn)模式定義 傳統(tǒng)的Winform程序模塊:用于傳統(tǒng)的數(shù)據(jù)庫(kù)通訊獲取數(shù)據(jù)饱普,這種方式獲取數(shù)據(jù),...