Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Combobox borderstyle

Hi I have set the combobox control's flatstyle to flat.

Is it possible to draw a border around this control?

The control does not have a borderstyle property. Any suggestions would be appreciated. Side note: I wish to keep the flatstyle flat if at all possible.

like image 655
p0enkie Avatar asked Nov 04 '12 17:11

p0enkie


1 Answers

Create custom ComboBox control, and override it's WndProc method. You can easily draw a border with ControlPaint.DrawBorder method:

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 There is also overloaded DrawBorder method, which allows to set width of border. Use it if you need.

like image 171
Sergey Berezovskiy Avatar answered Oct 06 '22 00:10

Sergey Berezovskiy