2009-09-18 5 views
2

J'ai suivi un article de codeproject sur l'utilisation de la boîte à outils interop forms (essentiellement un moyen pour les développeurs de mettre lentement à jour leurs projets VB6 vers .net en autorisant les composants .net à fonctionner en VB6)Charge de formulaire L'événement se déclenche deux fois en utilisant Interop Forms Toolkit

http://www.codeproject.com/KB/vb-interop/VB6InteropToolkit2.aspx

Bien que la forme .NET fonctionne bien dans tous les autres projets de tests et environnements, j'ai trouvé que l'événement Form_load tire en fait deux fois une fois qu'il est dans l'exécution dans l'exécution VB6. Non seulement ennuyeux, il force mon code d'initialisation à s'exécuter deux fois (provoquant toutes sortes de problèmes lors de la deuxième exécution).

Y a-t-il une explication quant à la raison pour laquelle cela se produit (je voudrais comprendre la raison)?

Y at-il une meilleure façon de travailler autour de ce en dehors de

If (runBefore = True) Then 

Répondre

2

Il est possible pour cela se produit si vous commencez implicitement le chargement d'un formulaire en accédant à une variable publique sous la forme d'un autre module, de manière explicite. montre le formulaire avant que le chargement soit terminé.

+0

Peut-être. Les wrappers interop (générés par le modèle toolkits) peuvent être en train de faire les appels. – MoSlo

+0

C'est ce qui m'arrivait, je devais définir certaines propriétés avant de charger le formulaire ... il est logique de le faire en fonction du fonctionnement des formes VB6. Merci! – RiddlerDev

0

Salut, j'ai essayé cela et il fonctionne ..

je l'ai mis en Form_Activate. Essentiellement pour tester si le formulaire est déjà chargé. si c'est le cas, déchargez-le. Je l'utilise comme compteur.

Sous Form_Activate privé()

Dim TestForm As Form 
i = 0 
For Each TestForm In Forms 
    If TestForm.Name = "frmStocks" Then i = i + 1 
    If i = 2 Then Unload Me 
Next TestForm 

End Sub

Questions connexes