• C# winform combobox 扩展


    先看看效果:



    先构造一个子项的类:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Drawing;//
    
    namespace ComboBox_Draw
    {
        //自定义组合框项
        class MyItem
        {
            //项文本内容
            private String Text;
           
            //项图片
            public Image Img;
    
            //构造函数
            public MyItem(String text, Image img)
            {
                Text = text;
                Img = img;
            }
    
            //重写ToString函数,返回项文本
            public override string ToString()
            {
                return Text;
            }
        }
    }

    然后看重写DrawItem事件:

    private void ComboBox1_DrawItem(object sender, DrawItemEventArgs e)
            {
                //鼠标选中在这个项上
                if ((e.State & DrawItemState.Selected) != 0)
                {
                    //渐变画刷
                    LinearGradientBrush brush = new LinearGradientBrush(e.Bounds, Color.FromArgb(255, 251, 237),
                                                     Color.FromArgb(255, 236, 181), LinearGradientMode.Vertical);
                    //填充区域
                    Rectangle borderRect = new Rectangle(3, e.Bounds.Y, e.Bounds.Width - 5, e.Bounds.Height - 2);
    
                    e.Graphics.FillRectangle(brush, borderRect);
    
                    //画边框
                    Pen pen = new Pen(Color.FromArgb(229, 195, 101));
                    e.Graphics.DrawRectangle(pen, borderRect);
                }
                else
                {
                    SolidBrush brush = new SolidBrush(Color.FromArgb(255, 255, 255));
                    e.Graphics.FillRectangle(brush, e.Bounds);
                }
    
                //获得项图片,绘制图片
                MyItem item = (MyItem)comboBox1.Items[e.Index];
                Image img = item.Img;
               
                //图片绘制的区域
                Rectangle imgRect = new Rectangle(6, e.Bounds.Y + 3, 45,45);
                e.Graphics.DrawImage(img, imgRect);
                
                //文本内容显示区域
                Rectangle textRect =
                        new Rectangle(imgRect.Right + 2, imgRect.Y, e.Bounds.Width - imgRect.Width, e.Bounds.Height - 2);
                
                //获得项文本内容,绘制文本
                String itemText = comboBox1.Items[e.Index].ToString();
    
                //文本格式垂直居中
                StringFormat strFormat = new StringFormat();
                strFormat.LineAlignment = StringAlignment.Center;
                e.Graphics.DrawString(itemText, new Font("微软雅黑", 12), Brushes.Black, textRect, strFormat);
            }

    最后是窗体Load事件:最后是窗体Load事件:

            private void Form1_Load(object sender, EventArgs e)
            {
                //添加项
                comboBox1.Items.Add(new MyItem("000000", Image.FromFile(Application.StartupPath + "\0.gif")));
                comboBox1.Items.Add(new MyItem("111111", Image.FromFile(Application.StartupPath + "\1.gif")));
                comboBox1.Items.Add(new MyItem("222222", Image.FromFile(Application.StartupPath + "\2.gif")));
                comboBox1.Items.Add(new MyItem("333333", Image.FromFile(Application.StartupPath + "\3.gif")));
    
                //默认选中项索引
                comboBox1.SelectedIndex = 0;
    
                //自绘组合框需要设置的一些属性
                comboBox1.DrawMode = DrawMode.OwnerDrawFixed;
                comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
                comboBox1.ItemHeight = 50;
                comboBox1.Width = 200;
    
                //添加DrawItem事件处理函数
                comboBox1.DrawItem += ComboBox1_DrawItem;
    
            }
  • 相关阅读:
    Maven 跳过测试的几种方式
    Java Optional 初始为空
    Java 8 中的设计模式策略
    Java 8 开始新增的 Optional 类 Optional 对象中的返回
    关于AWSIAMcertificate证书的说明
    VUE 常规截取和特殊字符之前之后截取
    vue判断字符串中是否包含某个字符串
    图片文字居中显示
    获取Java对象中所有的属性名称和属性值
    12注册中心consul
  • 原文地址:https://www.cnblogs.com/qingtianhua/p/3587964.html
Copyright © 2020-2023  润新知