zoukankan      html  css  js  c++  java
  • C# —— 点击按钮动态打开ComboBox

     网上搜索了好多资料,大多是重绘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彭

  • 相关阅读:
    Ansi,UTF8,Unicode,ASCII编码的区别
    Delphi 快捷键
    Sql Server2008恢复备份数据库问题
    js图片无缝滚动代码
    SQL Server 2008 清空删除日志文件 130G日志 10秒内变10M .
    JavaScript_循环26个英文字母的方法 .
    iframe跨子域
    sql数据库该名字
    大型网站架构的优化与架构演变(整理) .转自网络
    删除SQL日志语句,经测试8G日志文件都可以删除
  • 原文地址:https://www.cnblogs.com/eve612/p/14902147.html
Copyright © 2011-2022 走看看