ROTINAS IGUAIS SE COMPORTANTO DIFERENTE

FABAO 26/05/2016 15:07:39
#462616
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:

  
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?
FABRICIOWEB 26/05/2016 15:15:44
#462617
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
FABAO 26/05/2016 15:28:41
#462618
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
JABA 26/05/2016 15:45:12
#462619
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.
FABRICIOWEB 26/05/2016 15:56:11
#462620
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
FABRICIOWEB 26/05/2016 21:11:57
#462625
Se tiver resolvido finalize o topico
Tópico encerrado , respostas não são mais permitidas