FoxPro/Visual FoxPro - como validar text para que no quede vacios

   
Vista:

como validar text para que no quede vacios

Publicado por Jonat (7 intervenciones) el 29/09/2015 15:53:09
Hola como esta

bueno si me podrían ayudar , tengo un registro y no quiero que ninguno de ellos quede vacíos cuando puse el botón guardar. que me tire un mesagbox que diga text3 esta vació lo eh buscado muchas formas y no lo hace.
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
Imágen de perfil de Mauricio Antonio

como validar text para que no quede vacios

Publicado por Mauricio Antonio (1368 intervenciones) el 29/09/2015 16:25:33
este es un ejemplo, para que lo uses en cada campo a validar:
METODO Validate
IF EMPTY(THISFORM.Text1.Value)
....MESSAGEBOX('Campo no puede estar vacio......')
....RETURN .F.
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

como validar text para que no quede vacios

Publicado por Jonat (7 intervenciones) el 29/09/2015 16:40:57
IF EMPTY(THISFORM.Text1.Value)
....MESSAGEBOX('Campo no puede estar vacio......')
....RETURN .F.
ENDIF hahah me dice que esta vació la idea es ves cuando llenas un formulario el internet y cuando no llenas un campo se pone rojo o te dic que el campo x esta vacio esa es la idea
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

como validar text para que no quede vacios

Publicado por Fidel José (320 intervenciones) el 29/09/2015 17:07:46
Puedes utilizar una rutina recursiva.
El que tenga que ser una rutina recursiva es porque ubicará objetos en Containers, Page de PageFrame, Containers de Containers.
Los objetos, en este ejemplo son Texbox,Editbox,combobox, spinner y chekbox. Tal vez quieras excluir alguno.

Por ejemplo, si agregamos el método "GetEmpty" al formulario, en el botón de Grabar / Aceptar.
La estategia para por poner algo en la propiedad .Comment de los objetos que no queremos que queden vacíos. Esto se puede hacer en tiempo de diseño o en tiempo de ejecución, pero antes de que se llame al método GetEmpty.
En esos objetos, habría que agregarle un código en su getfocus:
This.backColor = rgb(255,255,255)

Thisform.getEmpty( Thisform ) && El parámetro Thisform va sin puntos ni comillas, como referencia de objeto.
IF PEMSTATUS(_SCREEN,"nCount",5) AND !empty(_screen.nCount)
Messagebox( transform(_screen.nCount) + " campos obligatorios vacíos ")
RETURN
ENDIF


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
45
46
*PROCEDURE getempty
		LPARAMETERS toObjeto , lNotDeclare
		IF !lNotDeclare
			ADDPROPERTY(_screen,"paObje[1,3]",null)
			ADDPROPERTY(_Screen,"nCount",0)
		ENDIF
		LOCAL lcBaseClass,oControl,oPage,i
		lcBaseClass=toObjeto.baseclass
		DO case
			CASE lcBaseClass="Form"
				FOR EACH oControl IN toObjeto.controls
					thisform.getempty(oControl,.t.)
				ENDFOR
 
			CASE lcBaseClass="Container"
				FOR EACH oControl IN toObjeto.controls
					thisform.getempty(oControl,.t.)
				ENDFOR
			CASE lcBaseClass=="Page"
				FOR EACH oControl IN toObjeto.controls
					thisform.getempty(oControl,.t.)
				ENDFOR
			CASE lcBaseClass=="Pageframe"
				FOR i=1 TO toObjeto.PageCount
					thisform.getEmpty(toObjeto.pages(i),.t.)
				ENDFOR
 
 
			CASE INLIST(lcBaseClass,"Textbox","Editbox","Combobox","Spinner","Chekbox")
				IF !EMPTY(toObjeto.Comment) AND EMPTY(toObjeto.value)
					WITH _Screen
						.nCount = .nCount + 1
						DIMENSION .paObje(.nCount,3)
						.paObje[.nCount,1]=toObjeto.Name
						.paObje[.nCount,2]=toObjeto.Comment
						.paObje[.nCount,3]=toObjeto
					ENDWITH
					toObjeto.BackColor=RGB(191,219,250)
				ELSE
					toObjeto.backColor=RGB(255,255,255)
				ENDIF
 
		ENDCASE
 
 
	*ENDPROC
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

como validar text para que no quede vacios

Publicado por Jonat (7 intervenciones) el 29/09/2015 18:27:19
saludos jose explicat por que no se bn soy un novato en esto y disculpa.
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

como validar text para que no quede vacios

Publicado por Fidel José (320 intervenciones) el 30/09/2015 01:24:36
Jonat
Te envío en adjunto un formulario de ejemplo. No es más que eso. El formulario es, obviamente, un disparate, pero sirve de excusa para tratar el tema de los campos vacíos. Para no complicar la cosa, pongo un Messagebox() con los faltantes, pero bien se puede hacer un form con un listbox para redireccionar los focos a los diversos lugares que correspondan.

En cada caso que interesa, se rellena la propiedad Comment con algo así como: "Omitió el nombre del tipo".
En el commandgroup, Aceptar, se llama primero al método "Get_Emtpy" del formulario. Este método revisa en todos los contenedores y el mismo form, si hay controles de los tipos elegidos (Textbox, Editbox, Combobox, Checkbox, spinner) y si esos controles tienen un valor en "comment". Si es así y además están vacíos, rellena un array que crea el mismo método e incrementa e uno la propiedad nCount (que también es creada por el método).

Como me quise evitar tener que poner en el GotFocus de cada objeto este This.backcolor = rgb(255,255,255), recurro a BINDEVENT() para solucionar el tema, con tres rutinas:
a) Get_bindEvent que es también recursiva, detectando los objetos elegidos allí donde estén y genera la instrucción BindEvent() para cada objeto.
b) Dlg_gotFocus, que tiene el código que ha de cumplir cada objeto cuando reciba el enfoque. Para detectar de qué objeto se trata, se utiliza AEVENTS().
c) dlg_LostFocus que tiene un código para el lostfocus de cada cuadro.
Este punto se evita fácilmente con una biblioteca de clases donde los objetos ya tengan en sus respectivos gotfocus la instrucción sobre el backcolor y otra que cuadre.
Esto funciona desde Vfp 8. Para las versiones anteriores, BindEvent no existe.

Fijate que los nombres de los Labels tienen una estrecha relación con los nombres de los textbox, spinner , etc respectivos, lo que permite que cambien de color cuando el cuadro relacionado tiene el enfoque. Igualmente, se utiliza para marcar (en rojo) cuando faltan datos.

Para evitar tener que escribir todos los comandos para blanquear el form, pongo otra rutina recursiva (Limpiar) que pone los valores correspondientes en los controles elegidos ( "" , 0 , .f. , ctod("") , etc)

Nota sobre rutinas recursivas.
Las rutinas recursivas no deben utilizarse para cualquier cosa. Cada llamada recursiva es una anidación, por lo que si hay 7 llamadas recursivas, tendremos 7 niveles de ejecución del mismo código.
Sin cambiar la configuración, Visual Fox soporta hasta 128 niveles de anidamiento, pero hay que contar el punto de partida de la recursividad. Si supera ese límite, el programa se interrumpirá (desborde de pila de llamadas).

En los formularios más complejos, difícilmente supere los 9 niveles de recursividad (por ejemplo, contenido de los columns de un grid que está en un Page de PageFrame, que a su vez está en un Container sobre el formulario.

Sin embargo, hay dos casos en los que resultan imprescindible:
1) El expuesto, sobre controles de un formulario o Container.
2) La exploración de carpetas en un disco. Esto puede llegar a dar hasta 30 niveles de anidamiento, aunque lo más que he detectado son 21 niveles.
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

como validar text para que no quede vacios

Publicado por Jonat (7 intervenciones) el 30/09/2015 02:35:42
ok gracias fidel jose.
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