Formatação de textbox é um trabalho quase que constante na vida de um programador. No entanto,  fique sabendo que uma hora ou outra você precisará fazer esse trabalho. Então para facilitar sua vida, hoje vou mostrar como construir uma classe para formatação de textbox, a fim de economizar seu tempo mantendo o código mais limpo.

Primeiramente gostaria de ressaltar que temos uma seção de comentários logo a baixo. Então, é importante  que você deixe sua opinião aqui no artigo. Se possível compartilhe esse conteúdo, você estará atribuindo grande força 💪 para nosso canal.

Também criei um video sobre esse artigo e publiquei no meu canal do youtube.  Aproveitando para dizer se você não é inscrito no canal, inscreva-se e ative o sino de notificação para receber os conteúdos em primeira mão sempre que postarmos um novo video.

 

Índice Do Conteúdo

 

O Que É WithEvents?

O WithEvents especifica que um ou mais variáveis de membro declaradas, se referem a uma instância de uma classe que pode gerar eventos. Portanto, podemos usar essa função para manipular os eventos de uma TextBox ou de qualquer outro controle.

Quando uma variável é definida usando WithEvents, você pode especificar declarativamente que um método trata os eventos da variável usando o Handles palavra-chave.

Texto Fonte: Docs.microsoft.com

 

Etapas Básicas Para Usar O WithEvents

Se você quiser que um manipulador de eventos específico seja executado sempre que um determinado evento for acionado, será possível escrever um manipulador de eventos para o objeto. O manipulador de eventos será executado quando o evento apropriado ocorrer.

Para criar um manipulador de eventos no nível do aplicativo, você deve usar as seguintes etapas básicas:

  • Declare uma variável para o objeto usando a palavra-chave WithEvents
  • Crie o procedimento para o evento do aplicativo específico. Por exemplo,  você pode criar um procedimento para o evento TextBox_KeyPress,  ComboBox_KeyPress declarando o WithEvents.
  • Crie e execute um procedimento que inicie o manipulador de eventos.

 

O Que Vamos Construir Nesse Exemplo

Vamos construir uma classe para formatação de Datae CPFque poderá ser utilizada sempre que necessária. A idéia principal do projeto é formatar vários controles que compartilham das mesmas características, sem a necessidade de replicação de códigos.

Formatação De TextBox : Utilizando WithEvents No VBA código em execução

Nossa classe vai implementar a biblioteca MsForms.TextBox, que por si poderá implementar os eventos KeyPressuma vez que objetos do tipo TextBoxos implementam . keypressé disparado sempre que uma tecla que produz um valor de caractere é pressionada. Geralmente utilizamos o keypress para formatações do tipo CPF e Data.

Após definir os objetos e eventos da classe, vamos instância-la no corpo do formulário definindo quais controles serão formatados. É importante ressaltar que para realizar esse tipo de trabalho é obrigatório o uso demódulos de classe. Então , se você não sabe o que é módulo de classe, aqui no site postei um artigo referente a esse tema.

 

Benefícios Ao Usar Uma Classe Para Formatação De TextBox

Já falei em outros artigos que módulos de classes são uma mão na roda. A maior vantagem de se criar uma classe para formatação de textbox, é por conta do reaproveitamento de código. Pois uma vez que você define a estrutura da classe, você não precisa reescrever essas formatações.

Falando sobre reaproveitamento de código, se você é um programador VBA freelance talvez esse artigo seja muito importante pra você. Imagine ficar reescrevendo toda vez as mesmas funções, sendo que você poderia apenas importar uma classe que já tenha isso tudo pronto?

Vamos ser mais radicais um pouco, quando você usa a biblioteca OLEDB por exemplo?

O que muitos programadores não sabem é que trata-se de uma classe especifica para manipulação de banco de dados. Agora pensa comigo, imagina você escrevendo todas as API a unha somente para fazer uma conexão com o banco de dados?

Não é muito mais fácil importar a biblioteca OLEDB e fazer assim?

Private db as new OLEDB.Connection

 

Até pouco tempo atrás ainda formatava minhas TextBox dentro da própria estrutura do UserForm:

Private Sub TextBoxDataCadastro_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    With TextBoxDataCadastro
        .MaxLength = 10
        Select Case KeyAscii
           Case 8
           Case 13: SendKeys "{TAB}"
           Case 48 To 57
              If .SelStart = 2 Then .SelText = "/"
              If .SelStart = 5 Then .SelText = "/"
           Case Else: KeyAscii = 0
        End Select
    End With
End Sub

A final qual o problema disso?

No meu ponto de vista o maior problema é a replicação de códigos dentro do formulário. Porque se você tem um UserFormque necessita formatar quatro TextBox para datas, automaticamente você iria implementar um evento para cada objeto. Entretanto na maioria das vezes, essas formatações seriam iguais mudando apenas o objeto a ser formatado.

Com o tempo ficará muito mais complicado fazer manutenção no seu sistema. Se sua aplicação contiver muitos tipos de formatações, o excesso de códigos desnecessários fará com que o projeto final fique bem maior. Se você não sabe, quanto mais linhas de código na estrutura do formulário mais pesada essa aplicação ficará.

 

Construído Nossa Classe Para Formatação De TextBox

Acesse a guia de desenvolvedor do VBA: segundo botão do mouse/Inserir/Módulo de Classe

Formatação De TextBox : Utilizando WithEvents No VBA Adicionando um módulo de classe

 

Renomeie essa classe para ClassFormat:

 

Adicione um novo UserForm e configure-o assim como da imagem a seguir, mas não precisa renomear as textbox vamos manter propriedades padrões para esse exemplo:

 

 

Agora vamos declarar variáveis em nossa classe usando a palavra-chave WithEvents. Para nosso exemplo vou chamar essas propriedades de ToCpf e ToData. Observe que nossas variáveis agora se referem a uma instância de uma classe que pode gerar eventos.

Formatação De TextBox : Utilizando WithEvents No VBA Variáveis WithEvents

 

Ao definir nossas propriedades usando a palavra WithEvents, podemos implementar eventos da classe TextBox. Para fazer isso é muito simples, veja a imagem a seguir:

Formatação De TextBox : Utilizando WithEvents No VBA Implementando Eventos

 

Implemente os eventos KeyPress para as propriedades ToCpf e ToData. Dentro do corpo de cada evento, vamos definir nossa condição de formatação, veja o código a seguir:

Option Explicit

Public WithEvents ToCpf As MSForms.TextBox
Public WithEvents ToData As MSForms.TextBox


Private Sub ToCpf_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    With ToCpf
        .MaxLength = 14
        Select Case KeyAscii
             Case 8
             Case 13: SendKeys "{TAB}"
             Case 48 To 57
                If .SelStart = 3 Then .SelText = "."
                If .SelStart = 7 Then .SelText = "."
                If .SelStart = 11 Then .SelText = "-"
             Case Else: KeyAscii = 0
          End Select
    End With
End Sub

Private Sub ToData_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    With ToData
        .MaxLength = 10
        Select Case KeyAscii
           Case 8
           Case 13: SendKeys "{TAB}"
           Case 48 To 57
              If .SelStart = 2 Then .SelText = "/"
              If .SelStart = 5 Then .SelText = "/"
           Case Else: KeyAscii = 0
        End Select
    End With
End Sub

 

Por fim, nossa classe estar pronta para ser usada!

 

Implementando Nossa Classe No Formulário

Crie um procedimento que inicie o manipulador de eventos da classe. Defina uma variável que vai receber a instância deClassFormat, vou chama-la de xFormat(). Lembre-se que essa variável precisa ser definida como Matrix, portanto adicione um parente-se nela:

Private xFormat() As New ClassFormat

 

Crie um método no formulário para chamar nosso evento, vou chama-lo de ChamarFormat():

Private Sub ChamarFormat()
End Sub

 

Em seu corpo cole o código a seguir:

    Dim i As Integer
    Dim cont As Integer
    
    cont = Me.Controls.Count - 1
    
    ReDim xFormat(0 To cont)
        For i = 0 To cont
            Select Case Me.Controls(i).Tag
                Case Is = "cpf"
                    Set xFormat(i).ToCpf = Me.Controls(i)
                Case Is = "data"
                    Set xFormat(i).ToData = Me.Controls(i)
            End Select
        Next

 

Seu bloco de código ficará parecido com isso!

 

Perceba que nosso método contem uma condição que verifica quais controles possuem os critérios da Tag. Essa TAG é uma forma de dizermos para compilador quais objetos do formulário podem ser formatados. Sem essa condição aconteceria um erro em tempo de execução, pois no formulário foi adicionado um controle Frameque não pode ser formatado nessa ocasião.

Select Case Me.Controls(i).Tag
    Case Is = "cpf"
      Set xFormat(i).ToCpf = Me.Controls(i)
    Case Is = "data"
      Set xFormat(i).ToData = Me.Controls(i)
End Select

 

Tudo que precisamos fazer agora é passar essas tags nos controles do formulário:

 

Conclusão

Execute o projeto e perceba que todas os controles serão formatados com um bloco de código apenas. Você pode implementar essa classe em outras partes do sistema, ganhando tempo e mantendo seu código muito mais limpo.

O mais bacana disso tudo é que você pode construir sua classe definindo adversos tipos de formatações. Então use e abuse de sua criatividade testando outros tipos de formatações, se você tiver alguma idéia mostre para gente. 😀

Se você teve dúvidas as respeito do artigo, deixe seu comentário logo a baixo que ajudamos você. Para facilitar seus estudos, clique nesse link e baixe o projeto exemplo criado para esse artigo.

Grande abraço!

Tags: | | | | | | |

Sobre o Autor

Welisson Silva
Welisson Silva

Analista de Sistemas, trabalha com TI desde 2014. Especializado em Vendas Online, desenvolvedor, programador, guitarrista e entusiasta de tudo que envolva tecnologia.