CAMPO NUMERICO DE MASKEDIT INCOMPLETO

ANDREW 04/01/2005 00:20:55
#58403
Por favor, me digam como mandar uma mensagem dizendo q o campo numérico de uma maskedit está incompleto. Como no exemplo: No campo de CPF é para ser digitado 11 números, se digitar menos que 11 números aparece uma mensagem dizendo pra digitar corretamente...muito obrigado pela atenção
RE.NANER 04/01/2005 00:33:59
#58406
Tenta isso..
Private Sub txtCPF_LostFocus()
If Len(txtCPF) < 14 Or txtCPF = "___.___.___-__" Then
MsgBox "CPF Incompleto!"
txtCPF.SetFocus
Exit Sub
End If
End Sub


Espero ter ajudado...

Falwosss

Renan
USUARIO.EXCLUIDOS 04/01/2005 01:27:17
#58411
Resposta escolhida
Isso não funciona muito bem, ao menos não da forma desejada.

Veja, o controle txtCPF é um Masked Edit Box, que por padrão mantém a máscara de entrada na propriedade Text, que é a propriedade padrão. Assim, ao usar:

Private Sub txtCPF_LostFocus()
If Len(txtCPF) < 14 Or txtCPF = "___.___.___-__" Then
MsgBox "CPF Incompleto!"
txtCPF.SetFocus
Exit Sub
End If
End Sub

Caso o usuário não preencha alguns dos dígitos, ainda assim, o Len da propriedade Text teria mais do que os 14 caracteres (CNPJ) ou 11 caracteres (CPF) solicitados.

A propriedade que se faz necessária para saber o tamanho específico do texto digitado, excluindo-se as máscaras, em um Masked Edit Box, é a ClipText.

Outra questão é embutir uma chamada Exit Sub em uma estrutura onde não há quaisquer outras operações posteriores. Não é necessária, nesse caso.

A sub poderia ficar mais ou menos assim, para funcionar:

Private Sub txtCPF_LostFocus()
If Not Len(txtCPF.ClipText) < 14 Then
...processos. Aqui cabem as rotinas para validação de dígito (módulo 11)
Else
MsgBox "CPF Incompleto!"
txtCPF.SetFocus
End If
End Sub

Claro, há as configurações do Masked, bem como outras formas de trabalho. Mas a ClipText se mostra bem simples e útil neste caso.
CAJU 04/01/2005 11:13:21
#58460
esse evento VALIDATE é melhor do que LOSTFOCUS nessas situações



Private Sub MaskEdBox1_Validate(Cancel As Boolean)
'coloque promptinclude = false

If Len(MaskEdBox1.Text) < 11 Then MsgBox "incompleto": Cancel = True: MaskEdBox1.SetFocus

End Sub
Tópico encerrado , respostas não são mais permitidas