Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Form going out of scope
Message
 
 
À
27/07/2006 14:13:41
Information générale
Forum:
Visual FoxPro
Catégorie:
Gestionnaire d'écran & Écrans
Versions des environnements
Visual FoxPro:
VFP 8 SP1
OS:
Windows XP SP2
Network:
Windows 2000 Server
Database:
Visual FoxPro
Divers
Thread ID:
01140798
Message ID:
01140826
Vues:
13
>>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.

We use an custom application to handle our forms. We create them by using the NewObject method of the application. This way all forms that we've created can be accessed from cstApplication.FormName. We have unique keys to help create distinct names. Additionally when we destroy the application all of the created forms are cleaned up nicely.

If you do use an array, make sure you clean up your object references within the array before releasing the application or it may hang.
Wine is sunlight, held together by water - Galileo Galilei
Un jour sans vin est comme un jour sans soleil - Louis Pasteur
Water separates the people of the world; wine unites them - anonymous
Wine is the most civilized thing in the world - Ernest Hemingway
Wine makes daily living easier, less hurried, with fewer tensions and more tolerance - Benjamin Franklin
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform