Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Form going out of scope
Message
From
27/07/2006 14:54:05
Dennis Schuette
Customized Business Services, Llc
Yuma, Arizona, United States
 
 
To
27/07/2006 14:13:41
General information
Forum:
Visual FoxPro
Category:
Forms & Form designer
Environment versions
Visual FoxPro:
VFP 8 SP1
OS:
Windows XP SP2
Network:
Windows 2000 Server
Database:
Visual FoxPro
Miscellaneous
Thread ID:
01140798
Message ID:
01140827
Views:
24
>>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.   && Reference to form 1
>  _SCREEN.MyRef[2] = .NULL.   && Reference to form 2
>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
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform