Enviar Arreglos y recibir arreglos como parametros entre formularios

1,152 views
Skip to first unread message

Ciro Vasquez

unread,
Apr 21, 2014, 4:59:50 PM4/21/14
to publice...@googlegroups.com
Buenas!!!, mi problema es el siguiente, en mi formulario principal tengo un grid que actualizo con un array, la informacion del aray la obtengo de otro formulario al que llamo con el DO FORM, pero el array no recibe la informacion de regreso, bueno aki esta mi codigo para explicarme mejor

DIMENSION orden_electa(5)
Do FORM elegir_orden.scx TO orden_electa
MESSAGEBOX( orden_electa(1))

**elegir_orden.scx le agregue una propiedad llamada avalore(5)*para que me almacene la informacion que necesito y el el evento UNLOAD tengo escrito
RETURN ThisForm.avalores
**He agregado a propiedad windowtype = 1modal

asi que en otras palabras lo que quiero es mandar un arreglo vacio a un formulario y que me regrese lleno, por si me dicen como arreglar esto o mejor hacerlo de una forma diferente



Fidel Charny

unread,
Apr 21, 2014, 5:26:20 PM4/21/14
to publice...@googlegroups.com
Para regresar un array, puedes crear un objeto empty con una propiedad array y regresar la referencia de objeto. 
No sé como se crea este Orden_electa, pero el retorno sería algó así:

*<Unload de elegir_orden>
lcLen=transform(alen(Orden_electa))
objReturn=NewObject("empty")
Addproperty(objREturn,"NewArray[&lcLen]",null)
for i=1 to alen(Orden_electa)
     objReturn.NewArray[i]=Orden_electa[i]
endfor
RETURN objREturn

* Petición
do form Elegir_Orden TO objDevuelto
* Actualizas valores
if vartype(objDevuelto)="O"
      for i=1 to alen(objDevuelto.NewArray)
           && acá puedes comprobar IF NOT ISNULL(objDevuelto,newArray[i])
           ....
      endfor
      objDevuelto=Null
endif

Ciro Vasquez

unread,
Apr 21, 2014, 6:11:25 PM4/21/14
to publice...@googlegroups.com
Gracias por tu respuesta, ya os contare como me fue con tu ayuda

Claudio Rivadera

unread,
Apr 22, 2014, 9:54:55 AM4/22/14
to publice...@googlegroups.com

Hola!
Fíjate en la ayuda SET UDFPARMS TO REFERENCE
Especifica que cuando pasas una variable o arreglo como parámetro a una función o procedimiento y su valor es cambiado, se cambiará el valor original.
Por defecto está configurado como SET UDFPARMS TO VALUE

Saludos!
Claudio
La Rioja, Argentina


Luis Maria Guayan

unread,
Apr 22, 2014, 11:16:05 AM4/22/14
to publice...@googlegroups.com
Debes pasar el array por referencia anteponiendo el símbolo @

Ej:
MiFunción(@MiArray)


Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

ZeRoberto

unread,
Apr 22, 2014, 11:37:04 AM4/22/14
to publicesvfoxpro
Acotando a lo que dice Luis Maria tienes que poner External Array 

Alejandro Isla

unread,
Apr 22, 2014, 3:41:51 PM4/22/14
to publice...@googlegroups.com
Una duda respecto las últimas respuestas ¿eso es aplicable a formularios?

Entiendo que no es posible un do form with @matriz ¿correcto?

Saludos, Alejandro

Fidel Charny

unread,
Apr 22, 2014, 5:48:47 PM4/22/14
to publice...@googlegroups.com
Dimension gaMatriz(5,2)
do form frmTal with gaMatriz  && creo que es el único caso en que no va @gaMatriz.

El problema es testear si el parámetro pasado es un array o no.

Allan Raúl Acuña

unread,
Apr 22, 2014, 5:50:17 PM4/22/14
to publice...@googlegroups.com
En todo caso si no logras, pasalo a un cursor.

Append From Array MyArray

Saludos cordiales.

Lic. Allan Raúl Acuña
Analista Programador
msn= allan...@hotmail.com
skype= NicEasySoft
            +(505) 8 831 8191      
www.NicEasySoft.org
Managua, Nicaragua
Centroamérica



Date: Tue, 22 Apr 2014 14:48:47 -0700
From: fjch...@gmail.com
To: publice...@googlegroups.com
Subject: [vfp] Re: Enviar Arreglos y recibir arreglos como parametros entre formularios

Victor Espina

unread,
Apr 23, 2014, 12:56:13 PM4/23/14
to publice...@googlegroups.com
Concuerdo con Fidel.  La mejor forma (la unica forma, creo), es pasar un objeto y almacenar el array en una propiedad de dicho objeto.  Ya que los objetos siempre son pasados por referencia, puedes manipular el array directamente en el form y los cambios regresaran al punto de llamada sin necesidad de usar el DO FORM TO.

Para crear el objeto parametro, puedes hacer:

LOCAL oParam
oParam = CREATE("Custom")
oParam.addPropertyt"aDatos[1,1]", NULL)

para copiar los datos del array origen a esa propiedad:
ACOPY(tuArrayDatos, oParam.aDatos)

luego invocas el form:
DO FORM myForm WITH oParam

en el Init del form:
PROCEDURE poParam
THISFORM.addProperty("oParam", poParam)

luego, en cualquier parte del form puedes acceder al array de esta forma:
THISFORM.oPAram.aDatos[fila.columna]

finalmente, cuando vuelvas del Form puedes copiar los datos a tu array original:
ACAOPY(oParam.aDatos, tuArrayDatos)


Saludos

Victor Espina
Reply all
Reply to author
Forward
0 new messages