none
Borda sólida ComboBox C# RRS feed

  • Pergunta

  • Olá amigos, gostaria de saber se existe uma forma de colocar borda sólida no combobox. Vejam que minha ideia é deixar igual aos textbox (conforme imagem). É possível?

    terça-feira, 3 de novembro de 2015 13:47

Respostas

  • O Combobox nativo nao possui definiçao de bordas.. para isso voce vai ter que extender o controle ComboBox nativo e adicionar as propriedades de bordura.

    isso é feito adicionando uma classe que herda da classe comobox nativa, veja o efeito:

    O codigo fica assim:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication6//usar o namespace da sua aplicaçao
    {
        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();
                }
            }
        }
    }
    

    fonte: http://stackoverflow.com/questions/13221240/combobox-borderstyle


    A parte complicada esta em modificar o combobox nativo pelo extendido. Isso é feito direto no arquivo de desiner

    Veja como ficou meu codigo:

     private void InitializeComponent()
            {
                this.comboBox1 = new WindowsFormsApplication6.ComboBoxWithBorder();//extendido
                this.comboBox2 = new System.Windows.Forms.ComboBox();//nativo


    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    • Marcado como Resposta Trassi terça-feira, 3 de novembro de 2015 15:11
    terça-feira, 3 de novembro de 2015 14:46

Todas as Respostas

  • O Combobox nativo nao possui definiçao de bordas.. para isso voce vai ter que extender o controle ComboBox nativo e adicionar as propriedades de bordura.

    isso é feito adicionando uma classe que herda da classe comobox nativa, veja o efeito:

    O codigo fica assim:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication6//usar o namespace da sua aplicaçao
    {
        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();
                }
            }
        }
    }
    

    fonte: http://stackoverflow.com/questions/13221240/combobox-borderstyle


    A parte complicada esta em modificar o combobox nativo pelo extendido. Isso é feito direto no arquivo de desiner

    Veja como ficou meu codigo:

     private void InitializeComponent()
            {
                this.comboBox1 = new WindowsFormsApplication6.ComboBoxWithBorder();//extendido
                this.comboBox2 = new System.Windows.Forms.ComboBox();//nativo


    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    • Marcado como Resposta Trassi terça-feira, 3 de novembro de 2015 15:11
    terça-feira, 3 de novembro de 2015 14:46

  • William obrigado. Me tira mais uma dúvida, é uma classe o arquivo "ComboBoxWithBorder"?
    terça-feira, 3 de novembro de 2015 15:43
  • Sim.. uma classe.

    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    terça-feira, 3 de novembro de 2015 15:52