SoloCodigo
Programación General => Visual Basic 6.0 e inferiores => Mensaje iniciado por: Jaume en Jueves 24 de Abril de 2003, 17:14
-
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:
-
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
-
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:
-
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
-
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