網上搜索了好多資料,大多是重繪ComboBox或者使用自定義控件創建一個全新的ComboBox(並非基於window的ComboBox)。
對於菜鳥的我,實現太麻煩,有些代碼理解起來困難,但是項目比較急,所以就投機取巧,簡單的做了一個比較粗糙的看起來像那么回事。
一、窗體布局如下
二、配置ComboBox的屬性:
1.把背景顏色設為和底下控件同色;
2.把FlatStyle設置為Flat,去掉邊框;
3.把DropDownStyle屬性設置為DropDownLine,禁止輸入,且去掉輸入區域的底色。
這樣ComboBox控件就完全無邊框和無底色了,實現了“隱身”。
這里需要注意的是,第三步一定要在第二步之后才能把入區域的底色改為設置的底色。
三、配置Panel屬性
1.把Panel拖到ComboBox上方,右邊緣和ComboBox對齊,需要把ComboBOx下拉三角形完全覆蓋掉;
2.把Panel的背景圖片換成自己想要的按鈕;
3.綁定Panel的Click事件如下,當點擊Panel時,使ComboBox下拉框展開
private void panelUsers_Click(object sender, EventArgs e) { this.comboBoxUsers.DroppedDown = true; }
現在基本大功告成了。
四、美化ComboBox
但是每次選者下拉框后,顯示區域總是伴隨藍色底色,不好看。原因是焦點在ComboBox上,所以我們把焦點放到其他控件上就可以了當選擇完成后,我們動態把焦點給回Panel
在ComboBox的SelectedIndexChanged事件中添加如下代碼即可
private void comboBoxUsers_SelectedIndexChanged(object sender, EventArgs e) { panelUsers.Focus(); }
五、最后為了看得像那么回事,美化一下Panel。
1.鼠標移到Panel上時,改變背景顏色,並畫上邊框:在MouseMove事件中添加以下代碼
private void panelUsers_MouseMove(object sender, MouseEventArgs e) { //改變顏色 panelUsers.BackColor = Color.FromArgb(179, 215, 243); //畫邊框 Graphics g = panelUsers.CreateGraphics(); Pen pen1 = new Pen(Color.FromArgb(47, 119, 163), 1); pen1.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid; //實線 g.DrawRectangle(pen1, 0, 0, this.panelUsers.Width - 1, this.panelUsers.Height - 1); //畫矩形 }
1.鼠標移開Panel上時,改變去掉顏色和邊框(實則把他們設為和背景控件顏色一樣):在MouseLeave事件中添加以下代碼
private void panelUsers_MouseLeave(object sender, EventArgs e) { //改變顏色 panelUsers.BackColor = Color.White; //擦除邊框 Graphics g = panelUsers.CreateGraphics(); Pen pen1 = new Pen(Color.White, 1); pen1.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid; //實線 g.DrawRectangle(pen1, 0, 0, this.panelUsers.Width - 1, this.panelUsers.Height - 1); //畫矩形 }
本文屬原創,歡迎轉載,轉載需要標明出處。vv彭