Event validating is not working

Asked

Viewed 27 times

1

I have this form:

form1

As the person puts the date of birth and clicks on identify category is made two checks:

  • If the name has been filled in;
  • If the date of birth is greater than the current date;

But the validation is not working as it should, see the codes:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace _2.MatriculaAluno
{
    public partial class frmMatriculaAlunoV2 : Form
    {
        public frmMatriculaAlunoV2()
        {
            InitializeComponent();
            lblHoje.Text = "Hoje é " + DateTime.Now.ToShortDateString(); //Fornece a data atual a label
        }

        private void frmMatriculaAlunoV2_Load(object sender, EventArgs e)
        {

        }

        private void btnIdentificar_Click(object sender, EventArgs e)
        {
            TimeSpan TsQuantidadeDias = DateTime.Now.Date - dtpDataNascimento.Value;
            int idade = (TsQuantidadeDias.Days / 365);


            if (txtNome.Text == String.Empty)
            {
                MessageBox.Show("Todos os dados solicitados devem ser informados", "Atenção!", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                if (idade > 17)
                {
                    lblCategoria.Text = "Adulto";
                }
                else if (idade > 13)
                {
                    lblCategoria.Text = "Juvenil B";
                }
                else if (idade > 10)
                {
                    lblCategoria.Text = "Juvenil A";
                }
                else if (idade > 7)
                {
                    lblCategoria.Text = "Infantil B";
                }
                else if (idade >= 5)
                {
                    lblCategoria.Text = "Infantil A";
                }
                else
                {
                    lblCategoria.Text = "Não existe categoria";
                }
            }
        }

        private void lblHoje_Validating(object sender, CancelEventArgs e)
        {


            if (dtpDataNascimento.Value.Year < DateTime.Now.Date.Year)
            {
                MessageBox.Show("O ano do último aniversário deve ser superior ao do ANO DE NASCIMENTO", "Atenção!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                e.Cancel = true; // não deixa passar a validação até o usuário não arrumar
            }
        }
    }
}

Observation, the event Validating is referenced in the current date label and date of birth.

  • Which part isn’t working, young man?

  • @LINQ was to give an error message when I put the date of birth higher than the current date

1 answer

0

All right, try it like this:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    namespace _2.MatriculaAluno
    {
        public partial class frmMatriculaAlunoV2 : Form
        {
            public frmMatriculaAlunoV2()
            {
                InitializeComponent();
                lblHoje.Text = "Hoje é " + DateTime.Now.ToShortDateString(); //Fornece a data atual a label
            }

            private void frmMatriculaAlunoV2_Load(object sender, EventArgs e)
            {

            }

            private void btnIdentificar_Click(object sender, EventArgs e)
            {
                TimeSpan TsQuantidadeDias = DateTime.Now.Date - dtpDataNascimento.Value;
                int idade = (TsQuantidadeDias.Days / 365);


                if (txtNome.Text == String.Empty)
                {
                    MessageBox.Show("Todos os dados solicitados devem ser informados", "Atenção!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else if (dtpDataNascimento.Value.Year < DateTime.Now.Date.Year)
                {
                    MessageBox.Show("O ano do último aniversário deve ser superior ao do ANO DE NASCIMENTO", "Atenção!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    e.Cancel = true; // não deixa passar a validação até o usuário não arrumar
                }
                else
                {

                    if (idade > 17)
                    {
                        lblCategoria.Text = "Adulto";
                    }
                    else if (idade > 13)
                    {
                        lblCategoria.Text = "Juvenil B";
                    }
                    else if (idade > 10)
                    {
                        lblCategoria.Text = "Juvenil A";
                    }
                    else if (idade > 7)
                    {
                        lblCategoria.Text = "Infantil B";
                    }
                    else if (idade >= 5)
                    {
                        lblCategoria.Text = "Infantil A";
                    }
                    else
                    {
                        lblCategoria.Text = "Não existe categoria";
                    }
                }
            }

            private void lblHoje_Validating(object sender, CancelEventArgs e)
            {

            }
        }
    }
  • Don’t give so because the event validating asks to use the e.Cancel

  • Ever tried without the event ? removing the e.Cancel and everything else.

  • Compiled but did not give the message if the birthday date is higher than the current date

Browser other questions tagged

You are not signed in. Login or sign up in order to post.