2012-11-04 5 views
5

Ciao Ho impostato il flatstyle del controllo combobox su flat.Combobox borderstyle

È possibile disegnare un bordo attorno a questo controllo?

Il controllo non ha una proprietà borderstyle. Tutti i suggerimenti sarebbero apprezzati. Nota a margine: desidero mantenere l'appartamento piatto se possibile.

+2

Il genitore del controllo può disegnare un bordo attorno ad esso nel suo gestore di eventi Paint. –

risposta

6

Inseriscilo in un pannello, imposta Bordo sul pannello, Inserisci riquadro cmb nel pannello, imposta riquadro cmb per il riempimento del dock e Stile bordo semplice.soluzione semplice ma non così elegante.

+0

Questo è sufficiente per i miei scopi grazie così tanto! – p0enkie

13

Creare il controllo ComboBox personalizzato ed eseguire l'override del metodo WndProc. Si può facilmente tracciare un confine con ControlPaint.DrawBorder metodo:

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(); 
     } 
    }  
} 

metodo drawBorder BTW C'è anche sovraccarico, che consente di impostare la larghezza del bordo. Usalo se hai bisogno.

+1

Funziona? I bordi di ComboBox non possono essere sovrascritti nell'evento paint. Penso che devi ignorare WndProc e cercare il messaggio di vernice non client. Certo, poi brilla piuttosto brutto. – LarsTech

+2

Prova il codice prima di pubblicarlo. –

+0

@LarsTech hai ragione, mio ​​male, risolto –