FoxPro/Visual FoxPro - Porque puedo accesar variables desde otro formulario

 
Vista:
sin imagen de perfil

Porque puedo accesar variables desde otro formulario

Publicado por salvador (4 intervenciones) el 17/06/2022 21:08:27
Buenos dias a Tod@s

Tengo una pregunta, porque puedo accesar desde FORMULARIO_2
3 variables declaradas en FORMULARIO_1

El escenario es el siguiente

estoy en FORMULARIO_1 en un boton el codigo es el siguiente

variable_1 = "HOLA"
variable_2 = "ADIOS"
do form FORMULARIO_2

y en FORMULARIO_2 hago lo sigueinte
messagebox(variable_1)
messagebox(variable_2)

esto me despliega "HOLA", le doy enter y despliega "ADIOS"

mi pregunta es

Porque tengo acceso a variables que son de otro formulario
cabe mencionar que no son declaradas PUBLIC en el FORMULARIO_1
los dos formularios son MODAL

alguien me puediera decir porque funciona de esa manera

de antemano muchas gracias
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
Val: 471
Plata
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Porque puedo accesar variables desde otro formulario

Publicado por Mauricio Antonio (1541 intervenciones) el 19/06/2022 04:00:45
toda variable usada o declarada en un formularo1, puede ser usada por cualquier formulario llamado desde el formulario1.
las variables declaradas como publicas en un formulario deben ser "limpiadas" en el metodo DESTROY, caso contrario quedan "abiertas".
Destroy
Release variable1, variable2.........
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Porque puedo accesar variables desde otro formulario

Publicado por salvador (4 intervenciones) el 20/06/2022 13:22:22
Muchas Gracias por tu respuesta, ahora me queda mas claro
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
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Porque puedo accesar variables desde otro formulario

Publicado por Fidel José (657 intervenciones) el 24/06/2022 23:26:34
En Visual Fox las variables declaradas al paso tienen el caracter de PRIVATE y pueden ser vistas y modificadas por cualquier procedimiento convocado desde el procedimiento en cual se declaran, incluso si se trata de una llamada a un formulario.
Por lo tanto, lo recomendable es usar variables locales

LOCAL Variable_1,Variable_2
variable_1 = "HOLA"
variable_2 = "ADIOS"
do form FORMULARIO_2

En esta formulación, las variables variable_1 y variable_2 no serán vistas por el Formulario_2 con independencia de que sea modal o modeless.
La estrategia que conviene utilizar, si es que se necesitan ver esos valores en el formulario_2, es pasarlas como parámetro

LOCAL Variable_1,Variable_2
variable_1 = "HOLA"
variable_2 = "ADIOS"
do form FORMULARIO_2 with VARIABLE_1, VARIABLE_2

Para que esto funcione, deberás declarar los parámetros en el INIT de Formulario_2

*[Formulario_2.INIT ]
LPARAMETERS tcVariable1,tcVariable2
* Si necesitas utilizar estos valores en un lugar diferente de INIT, deberás convertirlas en propiedades del formulario.
Addproperty(this,"propiedad1",m.tcVariable1)
Addproperty(this,"propiedad2",m.tcVariable2)

y en cualquier lugar de Formulario_2, puedes convocar estos valores con:
Thisform.Propiedad1
Thisform.Propiedad2

La definicion de Parameters como LPARAMETERS, impide que los valores de los parámetros sean vistos por cualquier método dependiente del Init del formulario.

Idéntico razonamiento se aplica tanto para los User Procedure, User Function o métodos de un formulario o de una clase.

Un caso típico en el siguiente ejemplo (que no tiene mucho sentido por cierto)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Dimension laArray(4)
laArray[1] = "Casa,Auto,Viaje"
laArray[2] = "Perro,Gato,Conejo"
laArray[3] = "Libro,Carpeta,Hoja"
laArray[4] = "Siempre,Nunca,a veces,quizás"
 
For i = 1 to alen(laArray)
	lcResulta = this.Analisis(laArray[i],i)
NEXT
 
* METODO Analisis
*-----------------
LPARAMETERS tcString,tnNum
FOR i = 1 TO GETWORDCOUNT(m.tcString,CHR(44))
	lcCaso = GETWORDNUM(m.tcString,i,CHR(44))
	IF i > m.tnNum
		EXIT
	ENDIF
NEXT
RETURN m.lcCaso
Esto funcionará mal, porque la variable "i" está definida "al paso" y por lo tanto es PRIVATE, lo que significa que se modificará en el procedimiento convocado (Analisis) donde también está definida "al paso". Bundary error aparecerá en cualquier momento.

Para solucionar este problema:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
LOCAL i
LOCAL ARRAY laArray(4)
laArray[1] = "Casa,Auto,Viaje"
laArray[2] = "Perro,Gato,Conejo"
laArray[3] = "Libro,Carpeta,Hoja"
laArray[4] = "Siempre,Nunca,a veces,quizás"
 
For i = 1 to alen(laArray)
	lcResulta = this.Analisis(laArray[i],i)
NEXT
 
* METODO Analisis
*-----------------
LPARAMETERS tcString,tnNum
LOCAL i
FOR i = 1 TO GETWORDCOUNT(m.tcString,CHR(44))
	lcCaso = GETWORDNUM(m.tcString,i,CHR(44))
	IF i > m.tnNum
		EXIT
	ENDIF
NEXT
RETURN m.lcCaso

La definición de una variable como LOCAL logra que Visual fox le asigne un nombre interno diferente con el cual trabaja sin que uno se entere y logra el principio de "aislamiento" tan necesario para evitar confusiones.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Porque puedo accesar variables desde otro formulario

Publicado por salvador (4 intervenciones) el 27/06/2022 13:45:52
Mil gracias por tu respuesta, super super explicado
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