>>I have two non modal forms that I want to share data and interact.
>>
>>Form1.command1.Click()
>>if TYPE("Form2") == 'O' AND NOT ISNULL(Form2)
>> Form2.Show()
>>else
>> do form2
>>endif
>
>>This works correctly. If Form2 has been previously opened, the .Show() method works as expected. If Form2 has not >been opened, it runs correctly.
>
>>In Form2.command2.Click() I have the following code:
>
>>if TYPE("Form1") == 'O' AND NOT ISNULL(Form1)
>> Form1.Show()
>>else
>> do form1
>>endif
>
>>The reference to Form1 is no longer in scope. I get an 'object Form1 is not found' error.
>
>You need to set a reference point for both forms, I would suggest adding a custom property to the _SCREEN variable:
>
>
>IF NOT PEMSTATUS(_screen,"MyRef",5)
> ADDPROPERTY(_SCREEN,"MyRef[1]",.F.)
> DIMENSION _SCREEN.MyRef[2]
> _SCREEN.MyRef[1] = .NULL.
> _SCREEN.MyRef[2] = .NULL.
>ENDIF
>DO FORM Form1
>
>
>Then in the Init and Destroy methods of Form1:
>
>
>PROCEDURE Init
>_SCREEN.MyRef[1] = thisform
>ENDPROC
>
>
>PROCEDURE Destroy
>_SCREEN.MyRef[1] = .NULL.
>ENDPROC
>
>
>The same in the Init and Destroy methods of Form2:
>
>
>PROCEDURE Init
>_SCREEN.MyRef[2] = thisform
>ENDPROC
>
>PROCEDURE Destroy
>_SCREEN.MyRef[2] = .NULL.
>ENDPROC
>
>
>Now either form can access the other via the _SCREEN.MyRef reference. Use the ISNULL() function to determine if the form is opened. If there can be multiple open windows, then you will need a more extensive collection to manage the form references.
Greg, thanks for the detailed code. One more question:
When I determine that Form1 exists,
isnull( _SCREEN.MyRef[1] ) = .F.
how do I reference the form and execute the .Show method?
Dennis Schuette