Carcleo 4 Denunciar post Postado Dezembro 17, 2008 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 SubAcontece 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 Compartilhar este post Link para o post Compartilhar em outros sites
Macal 0 Denunciar post Postado Dezembro 17, 2008 não entendi mto bem, mas você quer definir a mascara da maskedtextbox via codigo? se for isso, eu fiz um exemplo pequeno usando combobox que você pode adaptar para o seu caso. O q eu fiz foi mudar a mascara quando seleciono o valor da combobox. você pode fazer isso de outras formas, atraves de um botao (por exemplo, quando você clicar para obter os dados do seu banco) e mudar a mascara de acordo como numero de caracteres que vem da tabela, etc. segue o codigo. private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { if (comboBox1.SelectedItem.ToString() == "CPF") { maskedTextBox1.Mask = "000.000.000-00"; } else { if (comboBox1.SelectedItem.ToString() == "CNPJ") { maskedTextBox1.Mask = "000.000.000/0000-00"; } else { maskedTextBox1.Mask = ""; } } } Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 17, 2008 ok só uma observação. Não tinha mostrado onde colocava a mascara no código 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 cpf_cnpj.Mask = "###,###,###-##" End If If dr("tipo") = "j" Then tipo2.Checked = True tipo1.Checked = False cpf_cnpj.Mask = "##,###,###/####-##" End If Telefone.Text = dr("telefone") IE.Text = dr("ie") End SubEu fiz parecido com o teu a mascara até funciona mas o problema é que algumas vezes, não são todas, onde a pessoa é juridica, coloca mascara de CNPJ certo mas só exibe 11 dos 14 digitos do CPF.ai que ta o problema Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Dezembro 17, 2008 Mas é estranho a máscara do CPF funcionar e do CNPJ não, a idéia é a mesma. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 17, 2008 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 Ife 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 Ifou 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 Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Dezembro 17, 2008 Veja se tem o evento Row_DataBound. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 17, 2008 resolvi assium: Private Sub DGWClientes_CellFormatting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DGWClientes.CellFormatting 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 End Sub Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 18, 2008 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? Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 18, 2008 Doce ilusão foi a minha. Quando fasso: 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 alguem puder ajudar! Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Dezembro 18, 2008 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? Pra não virar bagunça cria outro tópico pra resolver este assunto citado acima. Referente ao problema deste tópico e se você comentar a linha que da o clear? Abraços.. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 18, 2008 não consegui executar a 3ª linha. da erro de overload Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Dezembro 18, 2008 Não entendi. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 18, 2008 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ç! Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Dezembro 18, 2008 Da uma olhada ae: http://forum.imasters.com.br/index.php?showtopic=137581 Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 18, 2008 olhei com atenção mas não entendi. Na verdade, nem o cara conmseguiu coincluir Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Dezembro 19, 2008 Esse artigo do macoratti mostra como usar o evento Keypress pra adicionar mascara e depois validar o CPF e CNPJ. http://www.macoratti.net/vbn_vdoc.htm Abraços... Compartilhar este post Link para o post Compartilhar em outros sites