FoxPro/Visual FoxPro - Validar 4 TextBox a la vez

   
Vista:

Validar 4 TextBox a la vez

Publicado por DanielVFP (37 intervenciones) el 31/10/2010 22:36:49
Hola a todos
La siguiente linea de código funciona bien para validar cada TextBox x separado pero ¿que pasa si el impredecible operador con el mouse se salta algún campo y lo deja vacio?.-

IF EMPTY(This.value)
MESSAGEBOX("El dato es obligatorio"," Atención",64,0)
RETURN 0
ENDIF

¿Como puedo hacer en el botón <Grabar> para que ninguno de los 4 TextBox que tiene el form queden vacios?, digo, ¿se puede sin hacer 4 IF?.-

Saludos y gracias x el tiempo.
Daniel
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Validar 4 TextBox a la vez

Publicado por Juan Manuel Cruz juanmcruz@hotmail.com (508 intervenciones) el 30/03/2011 10:24:18
Crea un método para el form, pongamos que se llame VALIDAR_CAMPOS

y que el botón GRABAR al hacer click, llame previamente a ese método, y de no pasar la prueba, devuelva el focus al objeto que no pasó la validación.

El validar cada campo conforme el enfoque pasa sobre él es una manera lineal de ver la interfaz de usuario, que debería haber sido ya desterrada, toda vez que en un entorno visual el usuario debería poder moverse por los objetos sin un control restrictivo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Validar 4 TextBox a la vez

Publicado por victor perez (278 intervenciones) el 01/11/2010 01:37:11
Hola,

Si, hay una rutina que te verifica que "X" campos no esten en blanco... solo le colocas a cada campo que no pueda quedar en blanco, en sus propiedad "Comment" un ASterisco (*) o el simbolo que deseas.

En tu linea de programacion, dentro del evento Grabar.Click colocas lo siguiente

LOCAL lnObjecto,lcContenido,lcNombre,lcFoco
FOR lnObjecto = 1 TO THISFORM.OBJECTS.COUNT
IF THISFORM.OBJECTS(lnObjecto).COMMENT="*"
lcNombre = THISFORM.OBJECTS(lnObjecto).NAME
lcContenido = "ThisForm." + lcNombre + ".Value"
IF EMPTY(&lcContenido)
MESSAGEBOX("Faltan Datos por Ingresar " ,"DATOS INCOMPLETOS")
lcFoco = "ThisForm." + lcNombre + ".SetFocus"
&lcFoco
RETURN 0
ENDIF
ENDIF
ENDFOR

Fijate bien en el "Thisform." porque debe ser la ruta completa, es decir, si usas PageFrame, pues debes agregar el nombre del pageframe y de la pagina...

En mi caso, uso un pageframe llamado PGFficha, que contiene PAGE1 y PAGE2

Todo los campos estan en el page1 asi que mi codigo debe decir
"THISFORM.PGFFICHA.PAGE1." en lugar de "THISFORM."

Prueba y veras que es interesante porque te manda exactamente al campo que esta en blanco y que no debe estarlo...

Saludos,

Victor,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Validar 4 TextBox a la vez

Publicado por DanielVFP (37 intervenciones) el 01/11/2010 02:31:08
Hola victor.
Maravilloso tú código, realmente interesante que ponga el cursor en el campo vacio.-
La único negativo que hay varias lineas que quisiera interpretar, voy a leer sobre Objectos
en VFP.-

Saludos y muchas pero muchas gracias.-
Daniel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Validar 4 TextBox a la vez

Publicado por victor perez (278 intervenciones) el 01/11/2010 19:31:27
Hola,

Claro es un codigo sencillo. Solo lee sobre propiedades y veras que lo entenderas a la perfeccion.

No es mi codigo, yo lo modifiqué un tanto para adecuarlo a mi sistema. Es un codigo libre que encontre creo que en otro sitio o aqui mismo, no recuerdo.

Interesante como la gente se ingenia para hacer las cosas mas sencillas y lo bueno es que lo comparten y asi nos facilita el asunto.

Yo no soy programador de profesion, soy medico y de 46 años pero me gusta el foxpro desde hace muchos años, primero con Dbase y Clipper.

En el VFP soy relativamente nuevo. Comencé en noviembre de 2008 y recibi la ayuda de un amigo en Peru...excelente amigo que me introdujo en este sistema que a mi parecer es muy muy bueno.

Saludos,

Victor,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Validar 4 TextBox a la vez

Publicado por DanielVFP (37 intervenciones) el 02/11/2010 01:02:46
Hola Doc
Que bien, bueno seria que nos leyéramos seguido para poder ayudarnos.-
Yo estoy estudiando C con todo solo que me pidieron un programita para vencimientos de productos y ya no tiene demasiado sentido hacerlo en FoxPro para windows y lo estoy intentando en VFP.-(Lenguaje que voy a seguir profundizando).-

Un gran abrazo desde Argentina.-
Daniel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Validar 4 TextBox a la vez

Publicado por DanielVFP (37 intervenciones) el 04/11/2010 17:38:16
Hola a todos.
Contarles a Víctor y a todos cual es el problema, cuando hago la validación con el código que posteo Víctor funciona a la perfección, directamente sobre los campos la cuestión es cuanto puse los TextBox en un contenedor no me funciona, hice todas las pruebas posible pera ya me agoté.-
Y ya que estamos en este caso en particular les hago otra pregunta, para validar cada campo antes que salga del mismo lo mas usual es poner un return .F. o que no salga dándole nuevamente el foco, que pasa si tengo x decir 10 campos y en el primero al operador de turno decide que se equivoco de producto, el programa no lo dejará salir ni si lo quiera coimear(corromper), hay alguna solución para este caso en particular.-

LOCAL lnObjecto,lcContenido,lcNombre,lcFoco
FOR lnObjecto = 1 TO THISFORM.OBJECTS.COUNT
IF THISFORM.OBJECTS(lnObjecto).COMMENT="*"
lcNombre = THISFORM.OBJECTS(lnObjecto).NAME
lcContenido = "ThisForm.cCampos." + lcNombre + ".Value"
IF EMPTY(&lcContenido)
MESSAGEBOX("Faltan Datos por Ingresar " ,"DATOS INCOMPLETOS")
lcFoco = "ThisForm.cCampos." + lcNombre + ".SetFocus"
&lcFoco
RETURN 0
ENDIF
ENDIF
ENDFOR

Saludos a todos.
Daniel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Validar 4 TextBox a la vez

Publicado por Gerardo (1 intervención) el 30/03/2011 00:38:37
Solo le falta agregarle el nombre de tu contenedor.

LOCAL lnObjecto,lcContenido,lcNombre,lcFoco
FOR lnObjecto = 1 TO THISFORM.MI_CONTENEDOR.OBJECTS.COUNT
IF THISFORM.MI_CONTENEDOR.OBJECTS(lnObjecto).COMMENT="*"
lcNombre = THISFORM.MI_CONTENEDOR.OBJECTS(lnObjecto).NAME
lcContenido = "ThisForm.MI_CONTENEDOR.cCampos." + lcNombre + ".Value"
IF EMPTY(&lcContenido)
MESSAGEBOX("Faltan Datos por Ingresar " ,"DATOS INCOMPLETOS")
lcFoco = "ThisForm.MI_CONTENEDOR.cCampos." + lcNombre + ".SetFocus"
&lcFoco
RETURN 0
ENDIF
ENDIF
ENDFOR
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de krismar

Validar 4 TextBox a la vez

Publicado por krismar krssalej@gmail.com (4 intervenciones) el 21/07/2016 18:34:18
holaa!! ok soy nueva en foxpro, con respecto a lo del la creacion del nuevo metodo como le digo al boton grabar que llame a ese metodo y que de manera de queno pase la prueba no grabe!? como seria el codigo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Validar 4 TextBox a la vez

Publicado por Fidel José (320 intervenciones) el 22/07/2016 01:51:47
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
*Click del botón grabar
Thisform.grabar()
 
* Metodo Grabar (Muy básico: comprobamos si el textbox text1 está vacío)
IF EMPTY(THIS.TEXT1.VALUE)
       THIS.TEXT1.SETFOCUS()
        RETURN
ENDIF
 
* Alternativamente puedes crear un método de validación que devuelva un valor False o True
* Cuando las validaciones son muchas o complejas, esto es más conveniente.
* Click del boton grabar
IF !THISFORM.VALIDAR()
      RETURN
ENDIF
THISFORM.GRABAR()
 
* o  en sentido positivo
IF THISFORM.VALIDAR()
        THISFORM.GRABAR()
ENDIF
 
* Otra: el método de validación puede devolver un objeto con dos propiedades, una Boolean y la otra una referencia de objeto a donde debe dirigirse el foco-
 
* Metodo Validar
loObj = newobject("Empty")
addproperty(loObj,"Result",.T.)
ADDPROPERTY(loObj, "objFocus",null)
IF EMPTY(THIS.TEXT1.VALUE)
        loObj.REsult = .F.
        loObj.ObjFocus = thisform.Text1
ENDIF
RETURN loObj
 
* Botón Grabar
local loREsp as object
loREsp = thisform.Validar()
if loREsp.Result
       Thisform.Grabar()
else
      IF NOT ISNULL(loResp.ObjFocus)
               loResp.ObjFocus.SEtFocus()
     endif
endif
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar