Hi Allan
Jim must've made a typo. It's not DO FORM WITH loParm TO loParm. loParm is a parameter object that exists even after the form exists. If you put TO loParm, the return value of the form will replace loParm with the return value of the form.
You can read and write the parameters in the parameter object from your form and upon exiting the form, the parameter object has those values.
>Jim,
>
>I tried your suggestion and received an error 'loParam not an object' when I attempted to reference it upon return to the calling program.
>
>However, if I define a class in my 'set procedure' program and add the object in the calling program based upon that class, I do not get the error. Also, in this case I didn't use the 'return thisform.loParam' in the called program.
>
>I really appreciate all of the suggestions in this thread.
>Thanks once again.
>>>Jim,
>>>
>>>That wouldn't work with local variables would it?
>>>I would have to use private?
>>>Tks.
>>>
>>
>>Alan,
>>
>>Passing by reference and variable scoping are tow different things. You could create a private array prior to calling your form and then address that array in the form, but that presents a whole mediad of potential problems.
>>
>>By far, the best solution ot your probelm is to use a parameter object;
>>
>>
>>
>>loParm = CreateObject("Relation")
>>loParm.AddProperty("MyArray(1,2)")
>>DIMENSION loParm.MyArray(2,3)
>>
>>FOR lnCnt1 = 1 TO 2
>> FOR lnCnt2 = 1 TO 3
>> loParm.MayArray(lnCnt1,lnCnt2) = SUBSTR("ABC",LnCnt2,1)
>> ENDFOR
>>ENDFOR
>>
>>* For this to work the form must be modal becasue only m odal form's can return values
>>DO MyForm WITH loParm TO loParm
>>
>>* Now loParm has a property named MyArray that has whatever the fomr put there for values.
>>
>>
>>In the form's code;
>>
>>
>>PROCEDURE Init
>> LPARAMETERS poParms
>> Thisform.AddProperty("MyParms")
>> Thisform.MyParms = poParms
>>ENDPROC
>>
>>
>>Then within the form you use Thisform.MyParms.MyArray(x,y)
>>
>>
>>PROCEDURE Unload
>>RETURN ThisForm.MyParms
>>