Desenvolvimento - Visual Basic .NET
Formatação de TextBox - WinForms
Com a extinção do antigo MaskEditBox (Visual Basic 6) pelo menos até versão 2003 do Visual Studio.net, a formatação do TextBox passou a ser uma tarefa manual, que deve ser implementada pelo desenvolvedor. Neste artigo estarei demonstrando como criar uma função genérica para a formatação de TextBox.
por Alexandre TarifaCodificação
Inicie um novo projeto do tipo Visual Basic e com o template Windows Aplication (figura 1).
Desenhando o formulário
Vamos criar um único formulário chamado frmFormatacao, desenhe o formulário conforme a imagem abaixo:
Adicione ao projeto uma nova Classe (Menu Project - Add Class) com o nome de clFuncaoGeral. Para facilitar a utilização da função, crie um Enum conforme listagem abaixo:
Public Enum OpcaoFormata ForCep = 1 ForData = 2 forCNPJ = 3 forCPF = 4 forTelefone = 5 End Enum
Este Enum será utilizado na chamada da função onde implementaremos cada tipo de formatação listada.
A função receberá 2 parâmetros: Opção do tipo OpcaoFormata (Enum criado) e txtText do tipo TextBox:
Public Function gfFormataCampo(ByVal Opcao As OpcaoFormata, ByVal txtTexto As TextBox)
Implemente dentro da função cada tipo de formatação:
Select Case Opcao Case OpcaoFormata.ForData If Len(txtTexto.Text) = 2 Or Len(txtTexto.Text) = 5 Then txtTexto.Text = txtTexto.Text & "/" txtTexto.SelectionStart = Len(txtTexto.Text) + 1 End If Case OpcaoFormata.ForCep If Len(txtTexto.Text) = 5 Then txtTexto.Text = txtTexto.Text & "-" txtTexto.SelectionStart = Len(txtTexto.Text) + 1 End If Case OpcaoFormata.forCNPJ If Len(txtTexto.Text) = 2 Or Len(txtTexto.Text) = 6 Then txtTexto.Text = txtTexto.Text & "." txtTexto.SelectionStart = Len(txtTexto.Text) + 1 End If If Len(txtTexto.Text) = 10 Then txtTexto.Text = txtTexto.Text & "/" txtTexto.SelectionStart = Len(txtTexto.Text) + 1 End If If Len(txtTexto.Text) = 15 Then txtTexto.Text = txtTexto.Text & "-" txtTexto.SelectionStart = Len(txtTexto.Text) + 1 End If Case OpcaoFormata.forCPF If Len(txtTexto.Text) = 3 Then txtTexto.Text = txtTexto.Text & "." txtTexto.SelectionStart = Len(txtTexto.Text) + 1 ElseIf Len(txtTexto.Text) = 7 Then txtTexto.Text = txtTexto.Text & "." txtTexto.SelectionStart = Len(txtTexto.Text) + 1 ElseIf Len(txtTexto.Text) = 11 Then txtTexto.Text = txtTexto.Text & "-" txtTexto.SelectionStart = Len(txtTexto.Text) + 1 End If Case OpcaoFormata.forTelefone If Len(txtTexto.Text) = 0 Then txtTexto.Text = txtTexto.Text & "(" txtTexto.SelectionStart = Len(txtTexto.Text) + 1 ElseIf Len(txtTexto.Text) = 3 Then txtTexto.Text = txtTexto.Text & ")" txtTexto.SelectionStart = Len(txtTexto.Text) + 1 ElseIf Len(txtTexto.Text) = 8 Then txtTexto.Text = txtTexto.Text & "-" txtTexto.SelectionStart = Len(txtTexto.Text) + 1 End If End Select
Temos nossa função criada, o próximo passo é colocar no nosso formulário a chamada para a função. Vamos utilizar o evento KeyPress de cada TextBox que criamos. O primeiro TextBox a ser formatado será o de Data. No evento KeyPress entre com o seguinte código:
Private Sub txtData_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtData.KeyPress Dim cl As New clFuncaoGeral cl.gfFormataCampo(clFuncaoGeral.OpcaoFormata.ForData, txtData) End Sub
Execute a aplicação e digite um valor qualquer de uma data. Note que a formatação do TextBox é efetuada:
Vamos criar a chamada para todos os TextBox, conforme abaixo:
Private Sub txtCep_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtCep.KeyPress Dim cl As New clFuncaoGeral cl.gfFormataCampo(clFuncaoGeral.OpcaoFormata.ForCep, txtCep) End Sub Private Sub txtCnpj_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtCnpj.KeyPress Dim cl As New clFuncaoGeral cl.gfFormataCampo(clFuncaoGeral.OpcaoFormata.forCNPJ, txtCnpj) End Sub Private Sub txtCpf_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtCpf.KeyPress Dim cl As New clFuncaoGeral cl.gfFormataCampo(clFuncaoGeral.OpcaoFormata.forCPF, txtCpf) End Sub Private Sub txtTelefone_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtTelefone.KeyPress Dim cl As New clFuncaoGeral cl.gfFormataCampo(clFuncaoGeral.OpcaoFormata.forTelefone, txtTelefone) End Sub
Execute novamente o projeto e entre com os valores nos campos:
Para estender os tipos de formatação, basta adicionar no Enum que criamos e implementar dentro da classe o novo tipo de formatação.
Para baixar o projeto completo clique aqui.
Conclusão: a formatação de TextBox pode ser facilitada com a criação desta função genérica, em versões futuras teremos o controle de máscara já nativo no Visual Studio (http://www.windowsforms.net/WhidbeyFeatures/default.aspx?PageID=2&ItemID=7&Cat=Controls&tabindex=4).
Se você tem interesse em aprender .net ou discutir .net entre no grupo de usuários Codificando.net - São Paulo.
Se tiver alguma dúvida, crítica, sugestão de artigo, fale comigo: atarifa@deloitte.com
Abraço.
Alexandre Tarifa
Líder Codificando.net SP
- Entity Framework 4: Repositório GenéricoVisual Basic .NET
- As edições 14 da Easy .net Magazine e 88 da .net Magazine já estão disponíveis.ADO.NET
- Postando no Twiiter com .NET e Migre.meC#
- Setup ApplicationsVisual Basic .NET
- Problemas na manipulação de arquivos do MS Excel com .NETVisual Basic .NET