none
validação não funciona como quero, pq? RRS feed

  • Pergunta

  • Porque isso não funciona???

    public void Validarentrada(Control ctrl, object sender, KeyPressEventArgs e)
    {
        foreach (Control c in ctrl.Controls)
        {
            if(c is TextBox)
            {
                if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != ','))
                {
                    e.Handled = true;
                    MessageBox.Show("este campo aceita somente numero e virgula");
                }
                if ((e.KeyChar == ','&& ((sender as TextBox).Text.IndexOf('.'> -1))
                {
                    e.Handled = true;
                    MessageBox.Show("este campo aceita somente uma virgula");
                }
     
            }
     
        }
     
    }
    

    estou tentando fazer essa validação ser geral pra todos os textbox do form...

    sábado, 2 de dezembro de 2017 22:14

Respostas

  • Você colocou a chamada desta função em um evento KeyPress? Se sim, por qual motivo colocou dentro de um foreach?

    Eu fiz um exemplo um pouco diferente e funcionou:

            private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                Validarentrada(sender, e);
            }
    
            public void Validarentrada(object sender, KeyPressEventArgs e)
            {
                if (sender is TextBox)
                {
                    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != ','))
                    {
                        e.Handled = true;
                        MessageBox.Show("este campo aceita somente numero e virgula");
                    }
                    if ((e.KeyChar == ',') && ((sender as TextBox).Text.IndexOf('.') > -1))
                    {
                        e.Handled = true;
                        MessageBox.Show("este campo aceita somente uma virgula");
                    }
    
                }
            }


    Danilo Oliveira www.coffeeandcodes.com.br

    segunda-feira, 4 de dezembro de 2017 09:18
  • No evento Load do form faça isso:

    foreach (Control c in ctrl.Controls)
    {
        if(c is TextBox)
        { 
           (c asTextBox).KeyPress += Validarentrada;
        } }

    e use a função do Danilo.


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Senior Developer C#
    Development Leader at JAMSOFT Informática
    Microsoft Certified Professional
    Criador e Mantenedor do EntityFramework Core for Firebird
    Contribuidor do EntityFramework Core
    Email: ralms@ralms.net
    Blog -  GitHub  -  LinkedIn -  Twitter

    segunda-feira, 4 de dezembro de 2017 17:40

Todas as Respostas

  • Você colocou a chamada desta função em um evento KeyPress? Se sim, por qual motivo colocou dentro de um foreach?

    Eu fiz um exemplo um pouco diferente e funcionou:

            private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                Validarentrada(sender, e);
            }
    
            public void Validarentrada(object sender, KeyPressEventArgs e)
            {
                if (sender is TextBox)
                {
                    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != ','))
                    {
                        e.Handled = true;
                        MessageBox.Show("este campo aceita somente numero e virgula");
                    }
                    if ((e.KeyChar == ',') && ((sender as TextBox).Text.IndexOf('.') > -1))
                    {
                        e.Handled = true;
                        MessageBox.Show("este campo aceita somente uma virgula");
                    }
    
                }
            }


    Danilo Oliveira www.coffeeandcodes.com.br

    segunda-feira, 4 de dezembro de 2017 09:18
  • No evento Load do form faça isso:

    foreach (Control c in ctrl.Controls)
    {
        if(c is TextBox)
        { 
           (c asTextBox).KeyPress += Validarentrada;
        } }

    e use a função do Danilo.


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Senior Developer C#
    Development Leader at JAMSOFT Informática
    Microsoft Certified Professional
    Criador e Mantenedor do EntityFramework Core for Firebird
    Contribuidor do EntityFramework Core
    Email: ralms@ralms.net
    Blog -  GitHub  -  LinkedIn -  Twitter

    segunda-feira, 4 de dezembro de 2017 17:40
  • Bom dia,

    Por falta de retorno essa thread está encerrada.

    Se necessário, favor abrir uma nova thread.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 11 de dezembro de 2017 12:53
    Moderador
  • oi, desculpe a demora, obrigado pela resposta, fui trabalhar no restante e esqueci disso...já vou testar..
    domingo, 17 de dezembro de 2017 13:22
  • oi, desculpe a demora, obrigado pela resposta, fui trabalhar no restante e esqueci disso...já vou testar..
    domingo, 17 de dezembro de 2017 13:22