Winform ComboBox 自定义

Posted T20140401

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Winform ComboBox 自定义相关的知识,希望对你有一定的参考价值。

项目需要实现下图所示的组合框效果,可惜winform组合框无法直接设置padding,重写了组合框。

自定义组合框代码如下

    public partial class UserCombox : ComboBox
    
        public UserCombox()
        
            InitializeComponent();
            _init();
        

        public UserCombox(IContainer container)
        
            container.Add(this);
            InitializeComponent();
        

        private void _init()//组合框风格设置
        
            this.DrawMode = DrawMode.OwnerDrawFixed;
            this.DropDownStyle = ComboBoxStyle.DropDownList;
        

        protected override void OnDrawItem(DrawItemEventArgs e)
        
            base.OnDrawItem(e);
            if (e.Index >= 0)
            
                Rectangle r = e.Bounds;
                string _text = this.Items[e.Index].ToString();
                if((e.State & DrawItemState.Selected) != 0) //鼠标所选行
                
                    e.Graphics.FillRectangle(Brushes.LightBlue, r);
                
                else
                
                    SolidBrush b = new SolidBrush(ColorTranslator.Fromhtml("#2f343e"));
                    e.Graphics.FillRectangle(b, r);//设置弹出菜单背景色
                

                e.Graphics.DrawString(_text, Font, Brushes.White, r.X + padding.Left, r.Y);
       
            
        

        public Padding padding  get; set; //自定义padding

利用上述代码,效果图如下,通过padding可以调整字符与左面的距离。

 效果并不理想,为了继续达到目标效果,再次自定义组合框。思路,通过上述的UserCombox、Label以及Button效果实现。

UserCombox:实现背景色以及Padding。

Label:用于显示选择的文本,单击click时,可以设置响应组合框单击事件。

Button:用于绘制个性化单击按钮,单击时,添加响应组合框事件。

public partial class ComboBoxEx : UserControl
    
        public ComboBoxEx()
        
            InitializeComponent();
            cb = new UserCombox();
            lt = new Label();
            bt = new Button();
        
        
        //设置控件大小、位置等

        private UserCombox cb;
        private Label lt;
        private Button bt;

    

先整理记录一部分,后续有时间的话,继续完善吧。

以上是关于Winform ComboBox 自定义的主要内容,如果未能解决你的问题,请参考以下文章

Winform ComboBox 自定义

Winform ComboBox 自定义

winform DataGridView 动态添加一列控件(自定义控件)

C# Winform自定义一个控件,一个按钮按下会显示ComboBox一样的下拉列表

C# winform 编程 自定义combobx控件,将treeview控件嵌入combobox中

C# winform程序一个自定义的类似于combobox的下拉控件把属性Enable设置成false的时候变成了如图片所示