MASKEDTEXTBOX MALUCO
Estou Utilizando o MaskedTextBox em Meu projeto Vb.net.
eu consegui pegar os numeros sem a mascara com tranquilidade
porem se o numero esta incompleto eu dou uma mensagem de advertencia e retorno foco ao maskedit
so que ele fica perdido o foco cai no meio do maskedit e conforme eu vou digitando ele vai inserindo espaços em branco na maskara.. pulando os campos e deixando tudo bagunçado..
estou usando o maskedit.mask - [Ô][Ô] para retirar a mascara
alguem pode me ajudar ??
eu consegui pegar os numeros sem a mascara com tranquilidade
porem se o numero esta incompleto eu dou uma mensagem de advertencia e retorno foco ao maskedit
so que ele fica perdido o foco cai no meio do maskedit e conforme eu vou digitando ele vai inserindo espaços em branco na maskara.. pulando os campos e deixando tudo bagunçado..
estou usando o maskedit.mask - [Ô][Ô] para retirar a mascara
alguem pode me ajudar ??
Tentou assim ?
CAMPO.FOCUS
CAMPO.SELECTALL
CAMPO.FOCUS
CAMPO.SELECTALL
RBARBIERI,
Estou quase desistindo do MASKEDTEXTBOX, por causa desse bug.
O que percebo é que ele só acontece, quando vc utiliza o esquema de apertar o enter e simular o tab, portanto se vc apertar o enter após digitar, quando vc volta ele da essa bosta de bug.
Só resolve se você selecionar ele todo, limpar e entrar novamente, ou sair do form e entrar novamente, a solução que implementei foi a seguinte, no textchange, quando a mascara
for completada, ele já salta para o campo seguinte, assim o usuario não precisa apertar o enter, o problema é para mascaras de quantidades de caracteres variadas, como celular por exemplo, que em SP tem o 9 na frente.
Selectall, e outras formas não resolvem.
Estou quase desistindo do MASKEDTEXTBOX, por causa desse bug.
O que percebo é que ele só acontece, quando vc utiliza o esquema de apertar o enter e simular o tab, portanto se vc apertar o enter após digitar, quando vc volta ele da essa bosta de bug.
Só resolve se você selecionar ele todo, limpar e entrar novamente, ou sair do form e entrar novamente, a solução que implementei foi a seguinte, no textchange, quando a mascara
for completada, ele já salta para o campo seguinte, assim o usuario não precisa apertar o enter, o problema é para mascaras de quantidades de caracteres variadas, como celular por exemplo, que em SP tem o 9 na frente.
Selectall, e outras formas não resolvem.
Ola a todos
quebrando a cuca consegui dar uma melhorada e chegar proximo do que eu quero fazer.. com muitas leituras na internet e ajuda dos amigos.. porem falta uma unica parte
Private Sub MskCPF_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MskCPF.KeyDown
If e.KeyCode = 13 Then
e.Handled = True
SendKeys.Send([Ô]{TAB}[Ô])
End If
End Sub
Private Sub MskCPF_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MskCPF.Validating
MskCPF.Mask = [Ô][Ô]
If MskCPF.Text.Trim.Length = 0 Then
MsgBox([Ô]campo vazio[Ô])
MskCPF.Focus()
[ô]MskCPF.SelectAll()
MskCPF.Select(MskCPF.Text.Length, 0)
MskCPF.Mask = [Ô]999.999.999-99[Ô]
Else
MskCPF.Mask = [Ô]999.999.999-99[Ô]
MskCPF.Focus()
MskCPF.Select(MskCPF.Text.Length, 0)
End If
End Sub
ao retornar o cursor.. ele retorna apos o - como posso fazer para que isso nao aconteca.. quero ele apos o ultimo campo e nao apos o traço..
obrigado a todos..
quebrando a cuca consegui dar uma melhorada e chegar proximo do que eu quero fazer.. com muitas leituras na internet e ajuda dos amigos.. porem falta uma unica parte
Private Sub MskCPF_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MskCPF.KeyDown
If e.KeyCode = 13 Then
e.Handled = True
SendKeys.Send([Ô]{TAB}[Ô])
End If
End Sub
Private Sub MskCPF_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MskCPF.Validating
MskCPF.Mask = [Ô][Ô]
If MskCPF.Text.Trim.Length = 0 Then
MsgBox([Ô]campo vazio[Ô])
MskCPF.Focus()
[ô]MskCPF.SelectAll()
MskCPF.Select(MskCPF.Text.Length, 0)
MskCPF.Mask = [Ô]999.999.999-99[Ô]
Else
MskCPF.Mask = [Ô]999.999.999-99[Ô]
MskCPF.Focus()
MskCPF.Select(MskCPF.Text.Length, 0)
End If
End Sub
ao retornar o cursor.. ele retorna apos o - como posso fazer para que isso nao aconteca.. quero ele apos o ultimo campo e nao apos o traço..
obrigado a todos..
PROBLEMA RESOLVIDO...COM ESSA ROTINA TENHO CONTROLE QUE EU PRECISO SOBRE O MASKEDTEXTBOX IGUAL TINHA NO VB
MskCPF.Mask = [Ô][Ô]
If CmbtPessoa.Text = [Ô]Juridica[Ô] Then
If ValidaCNPJ(MskCPF.Text) = True Then
txtcontato.Focus()
ElseIf Len(Trim(MskCPF.Text)) = 0 Then
txtcontato.Focus()
ElseIf Len(Trim(MskCPF.Text)) > 0 And Len(Trim(MskCPF.Text)) < 14 Then
MsgBox([Ô]O CNPJ do Cliente não está totalmente preenchido.[Ô], vbCritical, [Ô]Cadastro de Clientes[Ô])
MskCPF.Select(MskCPF.Text.Length, Len(Trim(MskCPF.Text)))
MskCPF.Mask = [Ô]99.999.999/9999-99[Ô]
MskCPF.Focus()
Else
MsgBox([Ô]O CNPJ do Cliente não é valido.[Ô], vbCritical, [Ô]Cadastro de Clientes[Ô])
MskCPF.Select(MskCPF.Text.Length, Len(Trim(MskCPF.Text)))
MskCPF.Mask = [Ô]99.999.999/9999-99[Ô]
MskCPF.Focus()
End If
ElseIf CmbtPessoa.Text = [Ô]Fisica[Ô] Then
If Len(Trim(MskCPF.Text)) = 0 Then
txtcontato.Focus()
ElseIf Len(Trim(MskCPF.Text)) > 0 And Len(Trim(MskCPF.Text)) < 11 Then
MsgBox([Ô]E Necessario digitar o CPF.[Ô], vbInformation, [Ô]Cadastro de Clientes[Ô])
MskCPF.Select(MskCPF.Text.Length, Len(Trim(MskCPF.Text)))
MskCPF.Mask = [Ô]999.999.999-99[Ô]
[ô]MskCep.Focus()
MskCPF.Focus()
Else
MskCPF.Mask = [Ô][Ô]
If ValidaCPF(MskCPF.Text) = True Then
[ô]If VerificaCGC(MskCPF.Text) = False Then
[ô]SendKeys([Ô]{END}[Ô])
txtcontato.Focus()
[ô]Else
[ô] MsgBox([Ô]O CPF ja está Cadastrado.[Ô], vbCritical, [Ô]Cadastro de Clientes[Ô])
[ô] MskCPF.Focus()
[ô]End If
Else
MsgBox([Ô]O CPF do Cliente e Invalido.[Ô], vbCritical, [Ô]Cadastro de Clientes[Ô])
MskCPF.Select(MskCPF.Text.Length, Len(Trim(MskCPF.Text)))
MskCPF.Mask = [Ô]999.999.999-99[Ô]
[ô]txtnome.Text = Empty
MskCPF.Focus()
End If
End If
End If
Espero Ajudar
MskCPF.Mask = [Ô][Ô]
If CmbtPessoa.Text = [Ô]Juridica[Ô] Then
If ValidaCNPJ(MskCPF.Text) = True Then
txtcontato.Focus()
ElseIf Len(Trim(MskCPF.Text)) = 0 Then
txtcontato.Focus()
ElseIf Len(Trim(MskCPF.Text)) > 0 And Len(Trim(MskCPF.Text)) < 14 Then
MsgBox([Ô]O CNPJ do Cliente não está totalmente preenchido.[Ô], vbCritical, [Ô]Cadastro de Clientes[Ô])
MskCPF.Select(MskCPF.Text.Length, Len(Trim(MskCPF.Text)))
MskCPF.Mask = [Ô]99.999.999/9999-99[Ô]
MskCPF.Focus()
Else
MsgBox([Ô]O CNPJ do Cliente não é valido.[Ô], vbCritical, [Ô]Cadastro de Clientes[Ô])
MskCPF.Select(MskCPF.Text.Length, Len(Trim(MskCPF.Text)))
MskCPF.Mask = [Ô]99.999.999/9999-99[Ô]
MskCPF.Focus()
End If
ElseIf CmbtPessoa.Text = [Ô]Fisica[Ô] Then
If Len(Trim(MskCPF.Text)) = 0 Then
txtcontato.Focus()
ElseIf Len(Trim(MskCPF.Text)) > 0 And Len(Trim(MskCPF.Text)) < 11 Then
MsgBox([Ô]E Necessario digitar o CPF.[Ô], vbInformation, [Ô]Cadastro de Clientes[Ô])
MskCPF.Select(MskCPF.Text.Length, Len(Trim(MskCPF.Text)))
MskCPF.Mask = [Ô]999.999.999-99[Ô]
[ô]MskCep.Focus()
MskCPF.Focus()
Else
MskCPF.Mask = [Ô][Ô]
If ValidaCPF(MskCPF.Text) = True Then
[ô]If VerificaCGC(MskCPF.Text) = False Then
[ô]SendKeys([Ô]{END}[Ô])
txtcontato.Focus()
[ô]Else
[ô] MsgBox([Ô]O CPF ja está Cadastrado.[Ô], vbCritical, [Ô]Cadastro de Clientes[Ô])
[ô] MskCPF.Focus()
[ô]End If
Else
MsgBox([Ô]O CPF do Cliente e Invalido.[Ô], vbCritical, [Ô]Cadastro de Clientes[Ô])
MskCPF.Select(MskCPF.Text.Length, Len(Trim(MskCPF.Text)))
MskCPF.Mask = [Ô]999.999.999-99[Ô]
[ô]txtnome.Text = Empty
MskCPF.Focus()
End If
End If
End If
Espero Ajudar
Para validação, ao invés de ElseIf Len(Trim(MskCPF.Text)) > 0 And Len(Trim(MskCPF.Text)) < 14 Then.
Utilize, MskCPF.MaskCompleted = False Then
Mas pelo que percebi, o bug que eu falo, não tem a ver com o seu caso.
Utilize, MskCPF.MaskCompleted = False Then
Mas pelo que percebi, o bug que eu falo, não tem a ver com o seu caso.
Tópico encerrado , respostas não são mais permitidas