ROTINAS IGUAIS SE COMPORTANTO DIFERENTE
Olá amigos, estou apanhando aqui de uma coisa que ao meu ver é simples porém ta dando uma confusão doida...
veja se alguém ja passou por isso:
tenho um formulário de cadastro onde tenho Fone1 e Fone2. Uso uma rotina para formatar os numeros no formato de telefone quando o controle perde o foco (LostFocus)
segue o código:
e Fone2:
como podem ver, as rotinas são identicas, porém com o o Fone2 roda perfeitamente, ja com a rotina Fone1 não funciona e entra em um loop infinito...
é como se a exit sub não funcionasse e ele então entra em conflito com o lostFocus e o setFocus...
alguém ja passou por isso?
veja se alguém ja passou por isso:
tenho um formulário de cadastro onde tenho Fone1 e Fone2. Uso uma rotina para formatar os numeros no formato de telefone quando o controle perde o foco (LostFocus)
segue o código:
Dim cont As Integer
cont = Len(Replace(txtFone1.Text, vbCrLf, vbNullString))
If cont = 10 Then
txtFone1.Text = Format(txtFone1.Text, [Ô](##) ####-####[Ô])
Exit Sub
End If
If cont = 11 Then
txtFone1.Text = Format(txtFone1.Text, [Ô](##) #####-####[Ô])
Exit Sub
End If
If cont <> 10 And 11 Then
MsgBox [Ô]Informe o telefone, somente números, e com o DDD[Ô]
txtFone1.Text = [Ô][Ô]
txtFone1.SetFocus
Exit Sub
End If
e Fone2:
Dim cont As Integer
cont = Len(Replace(txtFone2.Text, vbCrLf, vbNullString))
If cont = 10 Then
txtFone2.Text = Format(txtFone2.Text, [Ô](##) ####-####[Ô])
Exit Sub
End If
If cont = 11 Then
txtFone2.Text = Format(txtFone2.Text, [Ô](##) #####-####[Ô])
Exit Sub
End If
If cont <> 10 And 11 Then
MsgBox [Ô]Informe o telefone, somente números, e com o DDD[Ô]
txtFone2.Text = [Ô][Ô]
txtFone2.SetFocus
Exit Sub
End If
como podem ver, as rotinas são identicas, porém com o o Fone2 roda perfeitamente, ja com a rotina Fone1 não funciona e entra em um loop infinito...
é como se a exit sub não funcionasse e ele então entra em conflito com o lostFocus e o setFocus...
alguém ja passou por isso?
Aqui ja tratado com o nono digito eu utilizo dessa forma
Private Sub MaskEdBox7_LostFocus()
If Len(MaskEdBox7.Text) > 0 Then
Select Case Len(MaskEdBox7.Text)
Case Is = 10
MaskEdBox7.Text = Format(MaskEdBox7.Text, [Ô](##)####-####[Ô])
Case Is = 11
MaskEdBox7.Text = Format(MaskEdBox7.Text, [Ô](##)#####-####[Ô])
End Select
End If
MaskEdBox7.BackColor = &HFFFFFF
If MaskEdBox7.Text = [Ô][Ô] Then
MaskEdBox7.Mask = [Ô][Ô]
MaskEdBox7.Text = [Ô][Ô]
MaskEdBox7.Mask = [Ô](##)####-####[Ô]
End If
End Sub
Private Sub MaskEdBox7_LostFocus()
If Len(MaskEdBox7.Text) > 0 Then
Select Case Len(MaskEdBox7.Text)
Case Is = 10
MaskEdBox7.Text = Format(MaskEdBox7.Text, [Ô](##)####-####[Ô])
Case Is = 11
MaskEdBox7.Text = Format(MaskEdBox7.Text, [Ô](##)#####-####[Ô])
End Select
End If
MaskEdBox7.BackColor = &HFFFFFF
If MaskEdBox7.Text = [Ô][Ô] Then
MaskEdBox7.Mask = [Ô][Ô]
MaskEdBox7.Text = [Ô][Ô]
MaskEdBox7.Mask = [Ô](##)####-####[Ô]
End If
End Sub
Sim Fabricio essa parte eu entendo
Porém quero tratar o código para quando o usuario digitar um numero que não está previsto na sua caso ou no meu If, por exemplo quando entrar somente com o numero sem o DDD.
Neste caso é necessário informar que deve colocar o DDD e setar o textbox, ou maskedit no seu caso, com o SetFocus, e é ai que vem o erro...
Agora o que está me intrigando é que em um dos textbox a mesma rotina funciona perfeitmente
Porém quero tratar o código para quando o usuario digitar um numero que não está previsto na sua caso ou no meu If, por exemplo quando entrar somente com o numero sem o DDD.
Neste caso é necessário informar que deve colocar o DDD e setar o textbox, ou maskedit no seu caso, com o SetFocus, e é ai que vem o erro...
Agora o que está me intrigando é que em um dos textbox a mesma rotina funciona perfeitmente
Certamente você está fazendo alguma coisa nos eventos que eles ficam se chamando eternamente. Creio que seja quando dispara o evento GotFocus e.LostFocus, algo como ficar trocando de foco infinitamente. Ou seja, um fica mandando o foco para o outro e vice-versa.
Acho que isso resolve
Private Sub MaskEdBox7_GotFocus()
MaskEdBox7.Mask = [Ô][Ô]
MaskEdBox7.Text = [Ô][Ô]
End Sub
Private Sub MaskEdBox7_LostFocus()
On Error Resume Next
If Len(MaskEdBox7.Text) > 0 Then
Select Case Len(MaskEdBox7.Text)
Case Is = 10
MaskEdBox7.Text = Format(MaskEdBox7.Text, [Ô](##)####-####[Ô])
Case Is = 11
MaskEdBox7.Text = Format(MaskEdBox7.Text, [Ô](##)#####-####[Ô])
End Select
End If
MaskEdBox7.BackColor = &HFFFFFF
If MaskEdBox7.Text = [Ô][Ô] Then
MaskEdBox7.Mask = [Ô][Ô]
MaskEdBox7.Text = [Ô][Ô]
MaskEdBox7.Mask = [Ô](##)####-####[Ô]
End If
cont = Replace(MaskEdBox7, [Ô] [Ô], [Ô][Ô])
cont = Replace(cont, [Ô]([Ô], [Ô][Ô])
cont = Replace(cont, [Ô])[Ô], [Ô][Ô])
cont = Replace(cont, [Ô]-[Ô], [Ô][Ô])
If Len(cont) <> 10 And 11 Then
MsgBox [Ô]Informe o telefone, somente números, e com o DDD[Ô]
MaskEdBox7.SetFocus
Exit Sub
End If
End Sub
Aqui funcionou perfeitamente
Private Sub MaskEdBox7_GotFocus()
MaskEdBox7.Mask = [Ô][Ô]
MaskEdBox7.Text = [Ô][Ô]
End Sub
Private Sub MaskEdBox7_LostFocus()
On Error Resume Next
If Len(MaskEdBox7.Text) > 0 Then
Select Case Len(MaskEdBox7.Text)
Case Is = 10
MaskEdBox7.Text = Format(MaskEdBox7.Text, [Ô](##)####-####[Ô])
Case Is = 11
MaskEdBox7.Text = Format(MaskEdBox7.Text, [Ô](##)#####-####[Ô])
End Select
End If
MaskEdBox7.BackColor = &HFFFFFF
If MaskEdBox7.Text = [Ô][Ô] Then
MaskEdBox7.Mask = [Ô][Ô]
MaskEdBox7.Text = [Ô][Ô]
MaskEdBox7.Mask = [Ô](##)####-####[Ô]
End If
cont = Replace(MaskEdBox7, [Ô] [Ô], [Ô][Ô])
cont = Replace(cont, [Ô]([Ô], [Ô][Ô])
cont = Replace(cont, [Ô])[Ô], [Ô][Ô])
cont = Replace(cont, [Ô]-[Ô], [Ô][Ô])
If Len(cont) <> 10 And 11 Then
MsgBox [Ô]Informe o telefone, somente números, e com o DDD[Ô]
MaskEdBox7.SetFocus
Exit Sub
End If
End Sub
Aqui funcionou perfeitamente
Se tiver resolvido finalize o topico
Tópico encerrado , respostas não são mais permitidas