Combobox bordertyle

时间:2012-11-04 17:53:31

标签: c# winforms combobox

您好我已经将组合框控件的扁平样式设置为扁平。

是否可以在此控件周围绘制边框?

该控件没有borderstyle属性。任何建议,将不胜感激。旁注:如果可能的话,我希望保持扁平式。

2 个答案:

答案 0 :(得分:13)

创建自定义ComboBox控件,并覆盖它的WndProc方法。您可以使用ControlPaint.DrawBorder方法轻松绘制边框:

public class ComboBoxWithBorder : ComboBox
{
    private Color _borderColor = Color.Black;
    private ButtonBorderStyle _borderStyle = ButtonBorderStyle.Solid;
    private static int WM_PAINT = 0x000F; 

    protected override void WndProc(ref Message m)
    {
        base.WndProc(ref m);

        if (m.Msg == WM_PAINT)
        {
            Graphics g = Graphics.FromHwnd(Handle);
            Rectangle bounds = new Rectangle(0, 0, Width, Height);
            ControlPaint.DrawBorder(g, bounds, _borderColor, _borderStyle);
        }
    }

    [Category("Appearance")]
    public Color BorderColor
    {
        get { return _borderColor; }
        set 
        { 
            _borderColor = value;
            Invalidate(); // causes control to be redrawn
        }
    }

    [Category("Appearance")]
    public ButtonBorderStyle BorderStyle
    {
        get { return _borderStyle; }
        set 
        { 
            _borderStyle = value;
            Invalidate();
        }
    }     
}

BTW 还有重载的DrawBorder方法,它允许设置边框的宽度。如果需要,请使用它。

答案 1 :(得分:6)

将它放在面板中,在面板上设置边框,在面板中放置cmb框,将cmb框设置为停靠填充和边框样式flat.simple但不是那么优雅的解决方案。