none
TextBox.Validating RRS feed

  • Pregunta

  • Muy Buenas.

    Tengo un problema con el evento Validating. Supongo que será una tontería, pero algo debo estar haciendo mal.

    Mi formulario consta de un Textbox (que quiero validar), un DataGridview, tres Botones. Todos estos controles tienen establecido en este orden el tabindex, es decir, el TextBox tiene el 1, el datagridview el 2, y los botones  el 3,4,5.

    El ultimo botón (el de tabindex=5) es el de salir del formulario por lo que establezco en él el CausesValidation = false para que no me haga ninguna comprobación (al menos, eso es lo que pretendo).

    Por los parámetros, el datagridview está vacío y enabled = false, los botones 1 y 2 se encuentran, el primero visible y enabled =false y el segundo visible = true y enabled = false. En resumen que cuando la caja de texto pierde el foco, debe ganarla el boton 3 y eso lo hace correctamente.

    El PROBLEMA es que cuando escribo algo en la caja de texto (causesvalidation=true) y pierdo el foco de ella, NO ME lanza el evento Validating, por lo que no realiza la comprobación. El foco lo gana el botón 3 y, curiosamente, cuando pincho el <enter>  o simplemente pierde el foco el botón 3 es cuando me lanza el validating de la caja de texto :-(

    ¿Alguien me puede dar alguna idea de porqué me pasa esto? ¿No sería lógico que me lanzara el validating cuando pierdo el foco del textbox? ¿A santo de qué me lanza el validating del textbox cuando pierde el foco el botón 3? Si en el botón 3 tengo establecido el CausesValidation = false, ¿por qué rabanos me lanza el validating del control textbox ?

    Siento el petardo de texto.
    Gracias a todos.


    JNS

    lunes, 30 de noviembre de 2015 9:28

Respuestas

  • El evento Validating se lanza cuando el control que recibe el foco tiene la propiedad CausesValidation establecida a true.
    Por ejemplo si tienes escrito código en el evento Validating de TextBox1 y pulsas click en el boton OK (CausesValidation = True) entonces el evento Validating del TextBox se lanza, PERO si pulsas en el botón Cancel (CausesValidation = false) el evento Validating del TextBox no se lanza



    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    lunes, 30 de noviembre de 2015 9:59
  • Prueba a Habilitar momentáneamente el DataGridView a ver si eso interfiere en el evento. Si es asi, cambiaría los TabOrder de los controles

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    lunes, 30 de noviembre de 2015 10:00

Todas las respuestas

  • Hola Jorge. Puedes decirnos si el desarrollo que estás implementando es Winforms o Web? A mi me da que es web pero para darte una respuesta debo saber. Gracias!

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    lunes, 30 de noviembre de 2015 9:41
  • Sergio, si está utilizando DataGridView entiendo que se trata de Winforms.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    lunes, 30 de noviembre de 2015 9:47
  • Gracias a tí.

    Es WindowsForms.


    JNS

    lunes, 30 de noviembre de 2015 9:50
  • Hola Asier. Efectivemente. Pero en muchas preguntas del foro se tiende a Confundir DataGridView y GridView.

    :)


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    lunes, 30 de noviembre de 2015 9:52
  • El evento Validating se lanza cuando el control que recibe el foco tiene la propiedad CausesValidation establecida a true.
    Por ejemplo si tienes escrito código en el evento Validating de TextBox1 y pulsas click en el boton OK (CausesValidation = True) entonces el evento Validating del TextBox se lanza, PERO si pulsas en el botón Cancel (CausesValidation = false) el evento Validating del TextBox no se lanza



    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    lunes, 30 de noviembre de 2015 9:59
  • Prueba a Habilitar momentáneamente el DataGridView a ver si eso interfiere en el evento. Si es asi, cambiaría los TabOrder de los controles

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    lunes, 30 de noviembre de 2015 10:00
  • Correcto.

    Tenía la idea cambiada.

    Tu solución me podría valer si tuviera algún control que pudiera meterle entre medio. En este caso, usaré los GotFocus para variar el estado del causesvalidation del botón,  aunque tendré que probarlo.

    Muchísimas gracias, por el interés, por la respuesta y, sobre todo, por la ayuda.


    JNS

    lunes, 30 de noviembre de 2015 10:08