2011-09-22 4 views
1

Je souhaite mettre à jour une base de données en fonction du formulaire actuellement activé. J'avais initialement décidé d'utiliser l'événement GotFocus. Cependant, je comprends maintenant que cela ne fonctionnera pas car le formulaire a des contrôles dessus. Alors j'ai pensé que j'utiliserais l'événement activé. Cela fonctionne mais semble tirer plusieurs fois. Je mets dans le code suivant:vb.net déclenché plusieurs fois

Private Sub frmNewTicket_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated 
    MsgBox("Form Activated") 
End Sub 

-je choisir la forme et la rendre active et la boîte de message apparaît environ 15 fois.

Pourquoi fait-il cela? Comment dois-je gérer cela. Je veux seulement que mon code s'exécute une fois quand le formulaire est activé. REMARQUE: Il y a plusieurs formes que les utilisateurs vont changer entre, y compris les formulaires provenant d'autres applications.

+0

De votre question je dérive, que vous voulez faire "quelque chose" une fois pour un formulaire actif? Peut-être que l'événement LOAD ou FORMCLOSING est ce que vous cherchez. La charge est exécutée juste avant que le formulaire soit affiché la première fois, pas encore visible par l'utilisateur. FormClosing est exécuté lorsque l'utilisateur (ou le code) décide de fermer la fenêtre, toujours visible. – Martin

Répondre

3

Chaque fois que vous cliquez sur OK dans la boîte de message, le formulaire récupère le focus et est de nouveau activé.

Mettez une valeur Boolean statique dans votre frmNewTicket_Activated comme quelqu'un a posté here:

Static HasRan As Boolean=False 
If Not HasRan Then 
    HasRan=True 
    'put code here 
End If 
+0

Salut Merci pour votre réponse. J'ai essayé ceci mais cela n'a fait aucune différence. Pour être honnête, je ne comprends pas pourquoi ce serait non plus. Chaque fois que l'événement déclenche HasRan sera défini sur False et sera donc faux lorsqu'il sera testé plus bas dans le code. Si je déplace la déclaration de HasRan ailleurs alors il ne tirera qu'une seule fois et une seule fois. Je suppose qu'il me manque quelque chose car je ne comprends pas comment cela fonctionnerait. Mais vous avez quand même aidé à résoudre le problème. J'utilisais le msgbox juste pour tester qu'il tirait. J'ai enlevé la boîte de message et cela fonctionne comme désiré. Merci – Stephen

+0

@Stephen lorsque vous attribuez une valeur initiale à une variable statique, elle n'est affectée que la première fois que la méthode '_Activated' est exécutée, pas à chaque fois. Je suis content que tu l'as fait fonctionner comme tu le voulais. Pour le faire fonctionner de cette façon pourrait avoir pris un peu de peaufinage, car ce qui se passe après que le formulaire est activé sera important. – jonsca

+0

@AndreSilva Merci pour les heads up! – jonsca

1

On dirait que vous êtes désireux de faire quelque chose à chaque fois que votre formulaire est activé. L'événement FormActivated fonctionnera correctement tant que ce que vous faites ne tire pas le focus du Form qui déclenchera alors un autre événement Activation lorsque le formulaire sera à nouveau mis au point. Essayez d'utiliser autre chose qu'un MessageBox pour tester comme Beep ou changer la couleur du formulaire

Questions connexes