Componentes de Classes utilizando herança e com ícone

 

Olá pessoal, neste primeiro artigo vamos tocar num ponto interessante para um desenvolvedor, é quando ele pode desenvolver um componente e permite que outros possam usar o componente feito, e neste artigo vamos abordar sobre:

 

  • Herança
  • Windows Control Library
  • Visual Studio 2005, 2003 e C#, VB.NET

Obs.: Os códigos descritos a seguir não terão o intuito de mostrar melhores práticas de codificação nem meios de ganharem performance nas aplicações, os códigos serão meios didáticos para atingirem o conceito descrito no tema do artigo.

 

Pois bem, neste artigo vamos criar nosso controle ( um textbox ) com a  finalidade de validar e-mails. Vamos ao que interessa.

 

Abra o Visual Studio, seja 2003 ou 2005, seja c# ou vb.net ( a gosto do cliente ), abra um projeto Windows Control Library.


dcsccuhifig01.JPG

 

Será gerado o arquivo UserControl1.vb, Delete-o.

 

Inclua um arquivo de classe. ( clique com o botão direito no projeto dentro do solution explore e vá na opção add e new item, selecione o item classe e dê um nome para o seu controle ) o nome dado por este arquivo fica a seu critério, para nossos testes escolhi este aqui: ctrlEmail e nesta classe herdaremos o nameSpace Windows.Forms.TextBox para que possamos estender a funcionalidade de um textbox, adicionando uma propriedade que verifica se o que foi digitado é um e-mail válido. Veja abaixo o código:

 

Vb.Net

Imports System.Windows.Forms

Imports System.Text.RegularExpressions

 

<System.Drawing.ToolboxBitmap("C:\Documents and Settings\udcsan1\My Documents\Cappe\pbr\about.ico")> _

Public Class ctrlEmail

    Inherits TextBox

 

    Public ReadOnly Property EmailValido() As Boolean

        Get

            Dim strRegex As String = "^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" + "\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" + ".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"

            Dim re As Regex = New Regex(strRegex)

            If (re.IsMatch(MyBase.Text)) Then

                Return (True)

            Else

                Return (False)

            End If

        End Get

    End Property

End Class

 

C#

using System.Windows.Forms;

using System.Text.RegularExpressions;

 

[System.Drawing.ToolboxBitmap(@"C:\Documents and Settings\udcsan1\My Documents\Cappe\pbr\about.ico")]

public class ctrlEmail : TextBox

{

      public bool EmailValido

      {

            get

            {

                  string strRegex = "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}" + "\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\" + ".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$";

                  Regex re = new Regex(strRegex);

                  if ((re.IsMatch(base.Text)))

                  {

                        return (true);

                  }

                  else

                  {

                        return (false);

                  }

            }

      }

}

 

Compile e feche o projeto, já temos o objetivo alcançado, vamos verificar e depois compreender o que aconteceu.

 

Crie outro projeto, adicione nosso controle clicando na toolbox e depois em add/Remove items..., localize a dll que foi gerada no projeto anterior através do browser como mostra na figura.

 

dcsccuhifig02.JPG 

 

Agora adicione o controle e no projeto que você criou teste o novo textbox, que tem a funcionalidade de validar e-mails.

 

dcsccuhifig03.JPG 

 

Coloque um botão para executar o nosso teste e insira o código abaixo.

 

VB.NET

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        If CtrlEmail1.EmailValido Then

            MessageBox.Show("Email Válido.", "Email", MessageBoxButtons.OK)

        Else

            MessageBox.Show("Email inválido.", "Email", MessageBoxButtons.OK)

        End If

    End Sub

                       

C#      

      private void button1_Click(object sender, System.EventArgs e)

      {

            if (ctrlEmail1.EmailValido)

            {

                  MessageBox.Show("Email Válido.","Email", MessageBoxButtons.OK);

            }

            else

            {

                  MessageBox.Show("Email inválido.","Email", MessageBoxButtons.OK);

           

            }

      }

 

Vamos explicar o que você precisa saber, o Atributo ToolboxBitmap é o responsável por ligar o ícone que você escolheu, junto ao Assembly gerado, para este exemplo ser rápido e eficaz utilizamos o projeto Windows Controls Library que traz namespaces que trabalham com controles de formulários e nos dão a oportunidade de ‘extendê-los’ sem ter a necessidade de termos que fazer esse trabalho manualmente, por isso que nós excluímos o arquivo que normalmente, neste tipo de projeto nós desenhamos o controle a ser usado, e nada mais do que interessante é utilizar herança para herdar nosso controle criando o TextBox com uma funcionalidade de validação, sendo que na linha que tem a instrução: if ((re.IsMatch(base.Text))) também recorremos às funcionalidades de Herança. Lembram-se que base se refere à classe base? Pois a nossa classe base é o TextBox, e só para explicar sobre a propriedade EmailValido ela aparece apagada na aba properties porque nossa propriedade é somente por leitura.

 

Como dito no início do artigo o código em si não é o importante, pois validar e-mails é muito simples e tem mil maneiras de se conseguir esse feito, mas espero que tenham entendido sobre algumas funcionalidades que podem ser muito poderosas se bem utilizadas como herança e criação de controles.

Gostaram, Dúvidas? Opinem.