前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C# —— 点击按钮动态打开ComboBox

C# —— 点击按钮动态打开ComboBox

作者头像
vv彭
发布2021-06-22 22:30:10
2.8K0
发布2021-06-22 22:30:10
举报
文章被收录于专栏:c#学习笔记

网上搜索了好多资料,大多是重绘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下拉框展开

代码语言:javascript
复制
 private void panelUsers_Click(object sender, EventArgs e)
        {
            this.comboBoxUsers.DroppedDown = true; 
        }

现在基本大功告成了。

四、美化ComboBox

但是每次选者下拉框后,显示区域总是伴随蓝色底色,不好看。原因是焦点在ComboBox上,所以我们把焦点放到其他控件上就可以了当选择完成后,我们动态把焦点给回Panel

在ComboBox的SelectedIndexChanged事件中添加如下代码即可

代码语言:javascript
复制
private void comboBoxUsers_SelectedIndexChanged(object sender, EventArgs e)
        {
            panelUsers.Focus();
        }

五、最后为了看得像那么回事,美化一下Panel。

1.鼠标移到Panel上时,改变背景颜色,并画上边框:在MouseMove事件中添加以下代码

代码语言:javascript
复制
 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事件中添加以下代码

代码语言:javascript
复制
 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彭

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-06-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档