• Miércoles 15 de Mayo de 2024, 03:51

Autor Tema:  Re: Evento Validate  (Leído 4094 veces)

Jaume

  • Miembro MUY activo
  • ***
  • Mensajes: 151
    • Ver Perfil
Re: Evento Validate
« en: Jueves 24 de Abril de 2003, 17:14 »
0
A ver si alguien puede darme una solución al siguiente problema con el que me encuentro:

Tengo una pantalla de mantenimiento de clientes. En el TextBox del nombre he puesto un código que me controla que el nombre que me entre el usuario no exista ya en la base de datos. (evento Validate)

Funciona perfecto.

Esta misma ventana tiene dos botones, uno de Aceptar y otro de Cancelar. Si todo es correcto, aceptas y guardas, si no quieres continuar cancelas y listo.

El problema está en que si tengo el nombre de un cliente que ya existe en este TextBox e intento darle al botón de cancelar se ejecuta el evento validate y me da el mesajito de cliente existente.

¿Como puedo evitar esto?

No vale decir que haga la comprobación mediante un botón de verificación, puesto que así es como lo tenía y el usuario se ha quejado porque siempre se olvidaba de pulsar el dichoso botón.



Salu2

:think:

J.M.Movilla

  • Miembro MUY activo
  • ***
  • Mensajes: 427
    • Ver Perfil
Re: Evento Validate
« Respuesta #1 en: Jueves 24 de Abril de 2003, 18:01 »
0
Hola Jaume:
Este problema me surge frecuentemente, tanto en el evento Validate como en el LostFocus.

Lo soluciono así:


Private Sub txtSig_Validate(Cancel As Boolean)
    ' -------------------------
    If not lVale Then Exit Sub
    lVale = False
    '--------------------------
    If IsNull(txtSig.Text) Or Trim(txtSig.Text) = "" Then
        x = MsgBox("No puede dejar este campo vacío.", vbCritical)
        txtSig.SetFocus
        Exit Sub
    End If
End Sub

La variable lVale, como la uso en toda la aplicación, la tengo definida como Public. Al entrar en todos los formularios que conllevan input la inicializo a False. Y en todos los eventos conflictivos pongo el condicionante del ejemplo.

Cambio su valor a True sólo cuando me interesa, como por ejemplo en

Private Sub txtSig_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = 13 Then
        CboAut.SetFocus       ' Foco al siguiente campo
        lVale = True
        txtSig_LostFocus
    ElseIf KeyCode = 27 Then
        CmdCan_Click
    End If
End Sub

Ya lo tengo por sistema, y se me han solventado los quebraderos de cabeza por ese pasar y repasar por esos eventos.

Saludos y suerte

grigri

  • Nuevo Miembro
  • *
  • Mensajes: 18
    • Ver Perfil
Re: Evento Validate
« Respuesta #2 en: Viernes 25 de Abril de 2003, 09:25 »
0
Hola, para solucionar el problema de ejecutar el evento Validate, basta con poner la propiedad  CausesValidation del boton Cancelar  a False, para que VBasic no ejecute el evento Validate del control que pierde el foco. Cuando VBasic encuentra que el ve que el control que va a recibir el foco tiene esa propiedad a true, ejecuta el validate del que pierde el foco, si está a false, no ejecuta el validate del control que pierde el foco.
Un saludo :hippi:

Jaume

  • Miembro MUY activo
  • ***
  • Mensajes: 151
    • Ver Perfil
Re: Evento Validate
« Respuesta #3 en: Viernes 25 de Abril de 2003, 10:57 »
0
grigri, Fantástico !!!

Uno no se acuesta sin aprender algo nuevo. Ya lo he puesto en mi ´programa y funciona de fábula.

José M., no me ha dado tiempo de probar tu solución, pero gracias por tu ayuda

Salu2

J.M.Movilla

  • Miembro MUY activo
  • ***
  • Mensajes: 427
    • Ver Perfil
Evento Validate
« Respuesta #4 en: Viernes 25 de Abril de 2003, 11:34 »
0
Sí, señor...

¿ Y también pueden desactivarse los demás eventos ?  Porque esa cuestión de repetir el ciclo ocurre también con  GotFocus y sobre todo con LostFocus cuando cambias el foco a otro objeto. A mí me ha fastidiado siempre un montón.

Saludos y gracias