VB - formatação de dados com MaskedBox


Geralmente em formulários de entrada de dados queremos além de fazer a validação dos dados preparar uma formatação de forma a orientar o usuário na entrada de certos valores padrões como : CEP , Telefone , CIC , RG , etc.

Existem muitos caminhos que você pode seguir para conseguir este objetivo , neste artigo eu vou falar do caminho mais fácil , usar um controle pronto : o controle MaskEdBox.

Geralmente você usa o controle MaskEdBox quando precisa usar uma máscara para formatar a entrada de valores com formatos conhecidos.

Os caracteres mais usados para a configuração da máscara são :

Já vi muita gente apanhando deste controle . Uma dica que você não deve esquecer é que você deve sempre definir a propriedade PromptInclude deste controle como False se estiver usando o controle no modo vinculado a dados. Se não fizer isto você vai ter um erro de dados a cada vez que você incluir um novo  registro na tabela ou tentar salvar ou ler o registro que possui um valor null no campo vinculado ao controle.

Você define a máscara na propriedade Mask do controle digitando os caracteres de formatação para o valor que desejar.

Para definir uma máscara para CGC , digite "##.###.###/####-##" para a propriedade Mask.

Para definir uma máscara para CEP ,  fazemos : "#####-###" na propriedade Mask.

Para valores monetários usamos a propriedade Format onde indicamos : "#,##0.00;(#,##0.00)"   - A primeira parte vale para valores positivos e a segunda (depois do ;) vale para valores negativos. Após isto devemos informar em Mask "999.999.999,99".

Para definir o formato para datas usamos : "dd-mm-yyyy" na propriedade Format e : "99/99/9999" na propriedade Mask.

Os valores para Format são exibidos nas propriedades do controle:

Outra propriedade importante é a propriedade PromptChar , onde você define um caractere para prompt durante a execução. O padrão é sublinha (_) mas você pode usar um espaço em branco. (Se definirmos PromptInclude como True este caractere será incluído como parte do código digitado)

Se você tentar limpar o texto do controle diretamente usando masked1.text = "" não vai conseguir . Para fazer isto você tem que remover a máscara . O código pode ser :

Temp = MaskEd1.Mask
MaskEd1.Mask = ""
MaskEd1.Text = ""
MaskEd.Mask = Temp

A seguir temos abaixo um formulário onde usamos o controle MaskedBox para formatar alguns valores.

Você pode estender a funcionalidade do controle usando código para trabalhar junto com ele nos eventos Keypress e KeyUp. Abaixo temos o código que permite bloquear e desbloquear um controle MaskedBox (recebi de um colaborador)

Option Explicit

Private lockme As Boolean
Private prevtext As String

Private Sub cmdBloquear_Click()

lockme = Not lockme

If lockme Then
     cmdBloquear.Caption = "Desbloquear"
Else
     cmdBloquear.Caption = "Bloquear"
End If

MaskEdBox1.SetFocus
End Sub

Private Sub MaskEdBox1_Change()

Static doing As Boolean

If doing Then Exit Sub
   doing = True
   If lockme = True Then
      MaskEdBox1.Text = prevtext
      doing = False
      Exit Sub
    End If
    prevtext = MaskEdBox1.Text
   doing = False

End Sub

 

Até a próxima...


José Carlos Macoratti