网上搜索了好多资料,大多是重绘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彭
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有