Dev (Back & Front)ARTIGO

Controles Personalizados: GradientLabel

Olá pessoal. Quero falar um pouco sobre controles Windows Forms. O .NET Framework já nos da uma centena de controles, mas há casos onde nenhum deles se encaixa em nossa necessidade. É dai que vem a necessidade de um mecanismo de criação e personalização de controles. O .NET Framework nos dá três opções para criar um controle:

Controle Composto

Um controle composto é criada pela combinação de um ou mais controles já existentes, em uma só montagem. Um bom exemplo disso é o já conhecido controle de login, que combina Labels, Textboxes e Buttons em uma só montagem.

Controle Estendido

Um controle estendido é criado a partir de um controle já existente, adicionando funcionalidade e aproveitando funcionalidade já existente no controle.

Controle Customizado

O controle customizado é criado tendo como base a classe base de todos os controles.

System.Windows.Forms.Controls. Nessa opção o desenvolvedor é responsável por toda a funcionalidade do controle, bem como a pintura do controle no formulário. Está é a opção mais flexível, porem a mais trabalhosa.

Criando o GradientLabel

GradientLabel em ação.GradientLabel em ação.

Ok, vamos focar na extensão de um controle existente, o Label. O Label tem como objetivo principal desenhar um texto na tela. O Label já expõe algumas funcionalidades básicas, dentre elas, o propriedade TextAlign, que define o alinhamento do texto dentro do controle.

Nosso controle estendido, GradientLabel deverá estender o controle Label, e terá como objetivo adicionar duas funcionalidades:

Criando o Controle

Primeiro devemos criar um projeto no VS.NET, Windows Control Library. O passo seguinte é mudar a herança da classe para a classe Label, dessa forma:

public partial class GradientLabel : System.Windows.Forms.Label

Desta maneira estamos criando uma classe GradientLabel, que usará a classe System.Windows.Forms.Label como base.

1 – Adicionando funcionalidade I: Propriedades

A criação de propriedades é feita da mesma maneira em aplicativo Windows Forms comum. No entanto se quisermos adicionar suporte ao designer devemos utilizar alguns atributos. Dar suporte ao designer significa possibilitar a interação com seu controle em tempo de design pela interface do VS.NET.

Exemplo:

[Description("Controls text orientation"), Category("Appearance"), DefaultValue(typeof(System.Drawing.Drawing2D.LinearGradientMode), "ForwardDiagonal")]<br />        /// <summary><br />        /// Get or set text flow from control.<br />        /// </summary><br />        public System.Drawing.Drawing2D.LinearGradientMode GradientMode<br />        {<br />            get { return lineargradmode; }<br />            set { lineargradmode = value; this.Invalidate(); }<br />        }

No código acima o atributo Description adiciona uma descrição a caixa de controles no VS.NET.

Category, encaixa o propriedade em uma das categorias existentes na caixa de propriedades do controle e DefaultValue estabelece um valor inicial para a propriedade.

2 – Adicionando Funcionalidade II – Controlando acesso a propriedades

Em alguns casos é necessário remover o acesso a algumas propriedades. Isso pode ser feito facilmente através do atributo Browsable. Em nosso caso queremos remover o acesso a propriedade AutoSize, assim o consumidor ficará responsável por configurar o tamanho de nosso controle manualmente.

[Browsable(false),DefaultValue(false)]<br />        public override bool AutoSize<br />        {<br />            get<br />            {<br />                return base.AutoSize;<br />            }<br />            set<br />            {<br />                base.AutoSize = value;<br />            }<br />        }

2 – Adicionando Funcionalidade III – Sobrescrevendo Métodos

Depois que já criamos todas as propriedades e removemos o acesso as propriedades indesejadas, só nos resta implementar a funcionalidade no código!

protected override void OnPaint(PaintEventArgs e)<br />        {<br />            //set init properties<br />            base.OnPaint(e);<br />            ...

O método OnPaint é responsável pelo desenho do controle na tela, e é aqui que entra nosso código para desenha o fundo gradiente e posicionar o controle verticalmente na tela.

Quero ouvir seu feedback. Me enviem suas duvidas, comentários e criticas.

Abraços e até a próxima.

é Analista de Sistemas, instrutor certificado Microsoft, mais de 2 anos de experiencia lecionando cursos oficiais. Possui 6 anos de experiência em infra-estrutura, e 4 em desenvolvimento, 2 com a pltaforma .NET e C#. Certficado MCP, MCSA 2000 e 2003, MCSA Exchange 2000, MCSE 2000, MCAD C# e MCT, mais de 15 exames de certificação no currículo.

Ver perfil