Ir para conteúdo
Fórum Script Brasil
  • 0

Problemas com exibição na maskedtextbox


Carlos Rocha

Pergunta

Ola pessoal.

Teno um código para exibir resutados de uma consulta ao MySql em textbox's.

Acontece que um dos campos do formulario, o que mostrará o CPF, tambem poderá mostrar CNPJ dependendo do valor que chega do campo "tipo" do MySql na tabela de clientes(se f ou j {Física ou Juridica}).

Esse é o código que estpou usando:

Private Sub exibirDados(ByVal m As Integer)
        Dim i As Integer = dt.Rows.Count - 1
        If m < 0 OrElse i < 0 Then Exit Sub
        dr = dt.Rows(m)

        Codigo.Text = dr("clienteID")
        cpf_cnpj.Text = dr("cpf_cnpj")
        cpf_cnpj2.Text = dr("cpf_cnpj")
        Nome.Text = dr("nome")
        Endereco.Text = dr("endereco")
        Bairro.Text = dr("bairro")
        Cidade.Text = dr("cidade")
        Estado.Text = dr("estado")
        Email.Text = dr("email")
        data.Text = dr("data")
        If dr("tipo") = "f" Then
            tipo1.Checked = True
            tipo2.Checked = False
                   End If
        If dr("tipo") = "j" Then
            tipo2.Checked = True
            tipo1.Checked = False
                   End If
        Telefone.Text = dr("telefone")
        IE.Text = dr("ie")
    End Sub
Acontece que o ampo que mostra o CPF ou CNPJ, é uma maskedtextbox pois não consegui uma rotina para colocar mascara na textbox. Acontece que, para fin de textm puz tambem no form, uma textbox ao lado da maskedtextbox recebendo o mesmo valor que ela para verificar o erro e percebi que, a makedtexbox as vezes mostra a mascara de cpf ou cnpj certo porem as vezes mostra apenas 11 dos 14 digitos do CNPJ e a textbox mostra os 14 digitos certinho. Mas, se eu insistir e clikar novamente, por exemplo, no Botao primeiro da navegação entre registros, ai a maskedtextbox mostra correto a mascara e o todos os numeros do CNPJ. O grilo que esta na minha cabeça é por que as vezes mostra só 11 digitos e não 5 ou 6 se 11 é a quantidade de dígitos de um CPF. O que eu preciso: 1) Ou uma forma de colocar mascar na textbox ou 2) como resolver esse problema. O código da navegação entre os registro (em botões):
Private Sub Primeiro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Primeiro.Click
        registro = 0
        exibirDados(registro)
    End Sub
    Private Sub Anterior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Anterior.Click
        registro = registro - 1
        If registro < 0 Then registro = 0
        exibirDados(registro)
    End Sub
    Private Sub Proximo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Proximo.Click
        Dim i As Integer = dt.Rows.Count - 1
        registro = registro + 1
        If registro > i Then registro = i
        exibirDados(registro)
    End Sub
    Private Sub Ultimo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ultimo.Click
        registro = dt.Rows.Count - 1
        exibirDados(registro)
    End Sub

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Bom resolvi o problema.

na hora da exibição fica assim:

If dr("tipo") = "f" Then
            tipo1.Checked = True
            tipo2.Checked = False

            cpf_cnpj.DataBindings.Clear()
            cpf_cnpj.Mask = "000,000,000-00"
            cpf_cnpj.DataBindings.Add("Text", ds.Tables(0), "cpf_cnpj")
        End If
        If dr("tipo") = "j" Then
            tipo2.Checked = True
            tipo1.Checked = False

            cpf_cnpj.DataBindings.Clear()
            cpf_cnpj.Mask = "00,000,000/0000-00"
            cpf_cnpj.DataBindings.Add("Text", ds.Tables(0), "cpf_cnpj")
        End If
e na hora de inserir um novo registro, fica assim:
Private Sub tipo1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tipo1.CheckedChanged
        If tipo1.Checked = True Then
            IE.Visible = False
            LabelIE.Visible = False
            tipo2.Checked = False
            cpf_cnpj.Visible = True
            Nome.Visible = True
            LabelNome.Visible = True
            LabelCPF.Visible = True
            LabelNome.Text = "Nome"
            LabelCPF.Text = "CPF:"
            cpf_cnpj.ReadOnly = False
            cpf_cnpj.DataBindings.Clear()
            cpf_cnpj.Mask = "000,000,000-00"
        End If
    End Sub
    Private Sub tipo2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tipo2.CheckedChanged
        If tipo2.Checked = True Then
            IE.Visible = True
            LabelIE.Visible = True
            tipo1.Checked = False
            cpf_cnpj.Visible = True
            Nome.Visible = True
            LabelNome.Visible = True
            LabelCPF.Visible = True
            LabelNome.Text = "Razão Social"
            LabelCPF.Text = "CNPJ: "
            cpf_cnpj.ReadOnly = False
            cpf_cnpj.DataBindings.Clear()
            cpf_cnpj.Mask = "00,000,000/0000-00"
        End If
ou seja, só tirar a atribuição de valor. Agora o problema é similar. tenho o código abixo para colocar a mascara na datagridview só não sei em que evento colocar:
For Each linha As DataGridViewRow In DGWClientes.Rows
            If DGWClientes.Columns.Item(10).ToString = "f" Then
                DGWClientes.Columns.Item(1).DefaultCellStyle.Format = "###,###,###-##"
            End If
            If DGWClientes.Columns.Item(10).ToString = "j" Then
                DGWClientes.Columns.Item(1).DefaultCellStyle.Format = "##,###,###/####-##"
            End If
        Next

Link para o comentário
Compartilhar em outros sites

  • 0

Dim d As Double

' Aqui vem a coluna com os dados, no meu caso é a coluna 1

If e.ColumnIndex = 1 Then

' Vejo se tem algo preenchido e eu estou convertendo

' para Double para aplicar uma máscara numérica

If e.Value IsNot Nothing AndAlso _

Double.TryParse(e.Value.ToString(), d) Then

Console.WriteLine(e.Value.ToString().Length)

' Se for até 11 caracteres, considero CPF

If e.Value.ToString().Length <= 11 Then

e.Value = d.ToString("###'.'###'.'###-##")

' De 12 a 14, CNPJ

ElseIf e.Value.ToString().Length > 11 AndAlso _

e.Value.ToString().Length <= 14 Then

e.Value = d.ToString("##'.'###'.'###/####-##")

End If

End If

End If

Agora só falta criar uma função para validar campos o fomulario como nome vazio, endereço, telefone e suas respectivas mensagens.

Como faz isso?

Link para o comentário
Compartilhar em outros sites

  • 0

Doce ilusão foi a minha.

Quando faço:

cpf_cnpj.DataBindings.Clear()
            cpf_cnpj.Mask = "00,000,000/0000-00"
            cpf_cnpj.DataBindings.Add("Text", ds.Tables(0), "cpf_cnpj"

Na primeira linha, cpf_cnpj.DataBindings.Clear(), eu zero o databinding e o código só pega o CPF ou CNPJ do primeiro registro toda hora.

Continua a procura por um código para colocar mascara na textbox e a função para validar campos não prenchidos no formulario com mensagem de cada uma.

Se alguém puder ajudar!

Link para o comentário
Compartilhar em outros sites

  • 0

Será que alguém pode me ajudar?

Tudo o que eu quero é o seguinte.

Na minha tabela de clientes, tem um campo "tipo" que guarda se o cliente é f ou j (Fisica ou Juridica)

Tem outro campo que guarda o CPF ou CNPJ dependendo do tipo de pessoa que é selecionada na hora de preencher o formulario. O campo se chama cpof_cnpj.

No formulario, tenho uma textbox que recebe e envia para o banco o valor da coluna cpf_cnpj

Eu quero é fazer uma mascara de cpf na textbox ou na maskedtextox se na textbox não tiver jeito que quando o checkbox tipo1 estiver "checked", e quan do o checkbox tipo2 estiver "checked", colocar uma mascara de cnpj.

Só isso!

Será que não tem uma forma mais facil não?

Um abç!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...