none
Saber ultimo boton presionado en un evento Leave RRS feed

  • Pregunta

  • Buenas noches:

    Estoy trabajando en una forma en la cual valido un campo (clave) con el evento Leave: al salir del campo valido si esa clave ya existe en mi base de datos, y si existe, mando un mensaje que indica que ya existe, y pongo el foco en el campo. El prblema es que si doy click en el boton cancelar, tambien me sale el mensaje, y ahi no quiero que salga.

    Necesito validar al prinicipio de mi rutina si el boton presionado fue Cancelar, para que no haga la validacion:

            private void wClave_Leave(object sender, EventArgs e)
            {

                Aqui necesito validar si se presiono boton cancelar, que haga return.          

                bool existe = BuscaRegistro(wClave.Text);
            }

    Aprecio mucho su ayuda

    Manuel

    domingo, 8 de abril de 2018 2:18

Respuestas

  • Gracias AntiWork, usé el evento validating y me funciona bien (igual que el leave).

    El problema es que en cuanto se pierde el foco del campo wClave, inmediatamente se va al validating, y no puedo detectar si pulsaron el boton Cancelar. 


            private void wClave_Validating(object sender, System.ComponentModel.CancelEventArgs e)
            {
                if (ultimo_boton_presionado == btnCancelar)
                {
                    return;
                }       
                bool existe = BuscaRegistro(wClave.Text);
                if (existe == true)
                {
                    MessageBox.Show("Registro ya exsite");
                }

            }

    Lo que me falta es la linea que puse en este ejemplo como "ultimo_boton_presionado"

    Porque no quiero que haga la validacion si dieron cancelar, pero en cualquier otra situacion, sí debe hacer la validacion.

    • Marcado como respuesta Manuel_12345 martes, 10 de abril de 2018 4:20
    martes, 10 de abril de 2018 2:33

Todas las respuestas

  • Usá el evento validating

    private void wClave_Validating(object sender, System.ComponentModel.CancelEventArgs e)
    {
       if(YaExiste(wClave.Text))
       {
         Messagebox.show(...);
          e.Cancel = true;
       }
    }



    • Editado AntiWork domingo, 8 de abril de 2018 4:24
    domingo, 8 de abril de 2018 4:23
  • También puedes poner un ErrorProvider en estado de error en el evento validating y se lo quitas en el evento Validated
    domingo, 8 de abril de 2018 4:29
  • Gracias AntiWork, usé el evento validating y me funciona bien (igual que el leave).

    El problema es que en cuanto se pierde el foco del campo wClave, inmediatamente se va al validating, y no puedo detectar si pulsaron el boton Cancelar. 


            private void wClave_Validating(object sender, System.ComponentModel.CancelEventArgs e)
            {
                if (ultimo_boton_presionado == btnCancelar)
                {
                    return;
                }       
                bool existe = BuscaRegistro(wClave.Text);
                if (existe == true)
                {
                    MessageBox.Show("Registro ya exsite");
                }

            }

    Lo que me falta es la linea que puse en este ejemplo como "ultimo_boton_presionado"

    Porque no quiero que haga la validacion si dieron cancelar, pero en cualquier otra situacion, sí debe hacer la validacion.

    • Marcado como respuesta Manuel_12345 martes, 10 de abril de 2018 4:20
    martes, 10 de abril de 2018 2:33
  • Ya encontre la solucion. Hay una propiedad causesvalidation. Si se activa en el boton cancelar esa propiedad = false, no va a hacer las validating de la forma:

                this.btnCancelar.CausesValidation = false;

    Lo unico es que no funciona si en el boton cancelar ponemos this.close(). Para que funcione, hay que poner 

      AutoValidate = AutoValidate.Disable;
      this.Close();

    Apenas empiezo a programar C#, y me sirvio mucho lo que me explico antiWork del ErrorProvider, ya que no lo conocia, pero ya lo agregue. Gracias de nuevo.

    martes, 10 de abril de 2018 4:20