2010-05-06 4 views
1

J'ai un formulaire avec deux sous-formulaires (sur des pages à onglets séparées). Il s'agit d'un projet MDB dans Access 2003.MS Access form_current() de lancer plusieurs fois

Lors de son ouverture initiale, Form_Current sur le sous-formulaire actif se déclenche une fois, comme il devrait.

Mais lorsque vous passez à un autre enregistrement (par exemple à partir du formulaire principal), il déclenche 4 fois Form_Current sur le sous-formulaire actif. Ensuite, les mouvements d'enregistrement suivants entraînent 2 fois le tir de Form_Current. C'est une douleur, parce que les sous-formulaires ont beaucoup de champs qui sont déplacés et/ou cachés et donc il saute pour chaque Form_Current, sans parler d'être lent.

J'ouvre le formulaire avec un filtre via DoCmd.OpenForm (en fait il envoie le filtre via OpenArgs). FilterOn est défini une seule fois, dans Form_Open sur le formulaire principal , jamais dans les sous-formulaires. Form_Current n'est pas appelé explicitement n'importe où ailleurs dans le code.

Quand je regarde la pile d'appel lorsque les feux Form_Current en mouvement la première fois, il ressemble:

my_subform.Form_Current 
[<Debug Window>] 
my_subform.Form_Current 

Il semble donc que quelque chose dans Form_Current déclenche un autre événement Form_Current. Mais seulement sur le premier mouvement d'enregistrement.

Le code dans Form_Current est quelque peu complexe, impliquant des classes personnalisées et des rappels d'événements , mais ne touche généralement pas les données de table. La seule chose que je peux penser est que le déclenchement d'un Form_Current est qu'il vérifie OldValue sur les contrôles de formulaire - cela peut-il être à l'origine?

Ou toute autre chose vient à l'esprit?

Merci.

Eric

+0

Ceci est un problème connu qui ne peut pas être contournées - l'événement OnCurrent d'un sous-formulaire toujours la première fois. Il n'y a rien que vous pouvez faire à ce sujet, sauf pour utiliser un compteur pour empêcher le code de tirer une deuxième fois. Merci –

Répondre

1

Comme TheAceMan1 a déjà fait remarquer, « La seule chose que vous devez faire attention à la sur événement courant est récursion! C'est ... code dans l'événement qui provoque l'événement redéclencher. Comme le déplacement Autre que cela ... l'événement peut être aussi lourd que nécessaire. " J'ai trouvé courant d'être horriblement brusque. Cela dit, c'est parfois le seul endroit où mettre votre code.

Vous savez peut-être que les événements pour les sous-formes déclenchent avant celles du formulaire parent. C'est certainement vrai pour Load, et peut-être aussi pour Current.

Je ne peux que suggérer un dépannage étape par étape; commentez des parties, vérifiez le fonctionnement et élaborez-le. Bien sûr, vous pouvez toujours poster un tas de code pour nous de voir.

+0

- il peut être lié à sous-formulaire courant de déclenchement avant formulaire parent, puis de nouveau sur la mise en mise au point sous-formulaire, ou quelque chose. J'aurais aimé avoir le temps de le retrouver. Pour l'instant, je pense que les utilisateurs peuvent gérer en éditant un enregistrement à la fois. –