none
checar data de nascimento RRS feed

  • Pergunta

  • Galera,

    no sisteminha que estou desenvolvendo, haverá um idade mínima para exigir o preenchimento de todos os campos. Por exemplo pessoas com idade menor que 10, bastaria preencher somente o nome e a data de nascimento. Acima desta, todos os outros campos seriam obrigatórios.

    Comecei com este código:

    private void btnChecar_Click(object sender, EventArgs e)
            {
                if(Convert.ToDateTime(txtDataNasc.Text).AddYears(10) < DateTime.Now)
                {
                    MessageBox.Show("Familiar menor de 10 anos!");
                }
            }

    mas não deu certo. Deu esse erro no if (Additional information: Cadeia de caracteres não foi reconhecida como DateTime válido.)

    A ideia é checar a idade, e desabilitar os demais campos.

    O que fiz de errado?

    Obrigado


    kildare

    quarta-feira, 27 de julho de 2016 01:07

Respostas

  • Olá,

    Pelo erro, parece que o seu textbox está vazio ou com um valor que não pode ser convertido para DateTime.

    Verifique se esse seu campo está com conteúdo nesse padrão dd/MM/yyyy.

    Para conseguir verificar isso em tempo de execução, recomendo colocar um breakpoint nessa linha e ir debugando

    Valeu!

    quarta-feira, 27 de julho de 2016 02:45

Todas as Respostas

  • Olá,

    Pelo erro, parece que o seu textbox está vazio ou com um valor que não pode ser convertido para DateTime.

    Verifique se esse seu campo está com conteúdo nesse padrão dd/MM/yyyy.

    Para conseguir verificar isso em tempo de execução, recomendo colocar um breakpoint nessa linha e ir debugando

    Valeu!

    quarta-feira, 27 de julho de 2016 02:45
  • Bom dia,

    Concordo com o colega André. Qual o formato da sua data no campo "txtDataNasc" ?

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    quarta-feira, 27 de julho de 2016 11:04
  • Cara,

    Dessa forma aqui , independente do formato do seu campo ele irá fazer a conversão. tente aee

                DateTime DataAtual;
                DateTime.TryParse(textBox1.Text, out DataAtual);
    
    
                if(DateTime.Today.Year - DataAtual.Year  < 10)
                {
                    MessageBox.Show("É menor");
                }
    
                else
                {
                    MessageBox.Show("É maior");
                }


    Diego Almeida Barreto&lt;/strong&gt; &lt;br/&gt; &lt;em&gt;System Analyst / Software Developer&lt;/em&gt; &lt;br/&gt; &lt;img &lt;/p&gt; &lt;/div&gt;

    quarta-feira, 27 de julho de 2016 12:35
  • Desculpa, mas discordo do Diego. O método TryParse realmente evita erros de conversão, porém se na TextBox o usuário informar o valor ou data que não exista, como por exemplo: "teste" ou "55/55/2011" o resultado da variável "DataAtual" ficará "01/01/0001" que é o valor inicial do DateTime. Dessa forma a verificação que segue abaixo seria comprometida.

    Kildare, você até pode usar o método TryParse, mas deve colocar uma verificação antes de determinar se o usuário tem menos ou mais de 10 anos.

    quarta-feira, 27 de julho de 2016 12:45
  • Secco,

    Um if resolve isso:

                DateTime DataAtual;
                DateTime.TryParse(textBox1.Text, out DataAtual);
    
    
                if (DataAtual == new DateTime(0001, 01, 01))
    
                    MessageBox.Show("Data Inválida");
    
                else
                {
                    if (DateTime.Today.Year - DataAtual.Year < 10)
                    {
                        MessageBox.Show("É menor");
                    }
    
                    else
                    {
                        MessageBox.Show("É maior");
                    }
                }


    Diego Almeida Barreto&lt;/strong&gt; &lt;br/&gt; &lt;em&gt;System Analyst / Software Developer&lt;/em&gt; &lt;br/&gt; &lt;img &lt;/p&gt; &lt;/div&gt;

    • Sugerido como Resposta Código Expresso quarta-feira, 27 de julho de 2016 17:35
    quarta-feira, 27 de julho de 2016 13:03
  • Exatamente Diego,

    Foi o que sugeri acima.

    quarta-feira, 27 de julho de 2016 13:05
  • Colegas, Vou testar os códigos, e retorno mais tarde. Muito obrigado.

    kildare

    quarta-feira, 27 de julho de 2016 14:45