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.
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.
Agora adicione o controle e no projeto que você criou teste o novo textbox, que tem a funcionalidade de validar e-mails.
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.