2009-06-03 2 views
1

J'ai une procédure d'événement qui doit être exécutée lorsque l'utilisateur sélectionne un certain enregistrement.Comment vérifier si l'événement CURRENT n'est pas pendant l'événement OPEN du formulaire

Si je le mets dans un sur l'événement actuel, il fonctionne.

Cependant, je ne suis pas besoin de fonctionner lorsque le formulaire est en cours d'ouverture. C'est-à-dire, lorsque le formulaire est ouvert et que les enregistrements sont chargés sur le formulaire, ma procédure événementielle est appelée pour chaque enregistrement chargé. Cela ralentit mon programme, car c'est inutile.

Ma question est, comment puis-je vérifier que l'événement est pas exécuté pendant la « chargement » des dossiers.

quelque chose comme:

on_current_event do: 

if event is not during on_load then 
do this 
end if 

end proc 
+0

Vous ne devriez obtenir un sur l'événement actuel lorsque vous ouvrez le formulaire - sauf si vous faites quelque chose de bizarre - ce que tu fais un tas de quelque chose ?? ou actualisations –

+0

désolé, oui, il est probablement appelé une fois. mais quand je passe à un autre enregistrement dans le formulaire principal. il est appelé pour chaque enregistrement qu'il passe dans le formulaire principal. ralentit –

+0

C'est le but de l'événement OnCurrent: il est appelé chaque fois que vous passez à un nouvel enregistrement. L'événement OnLoad n'est appelé qu'une seule fois lorsque le formulaire est ouvert. –

Répondre

0

Vous avez assez bien répondu à votre propre question - pourquoi utilisez-vous pas sur l'événement CHARGE?

+0

mais lorsque je déplace le curseur vers un autre enregistrement, la procédure événementielle doit être appelée. avec en charge, il ne sera pas appelé –

+0

Désolé, vous avez raison. J'ai lu votre question et supposé que vous montriez une rangée à la fois et rechargeant le formulaire pour chaque sélection de rangée. La solution de Simon est meilleure. – dsteele

3

Pourquoi ne pas déclarer une variable booléenne de niveau de forme et de le mettre à true lorsque le formulaire a terminé le chargement?

Dans votre cas OnCurrent vous pouvez faire quelque chose comme:

If Variable then 
    Do Stuff 
Else 
    Don't do stuff 
End If 

Ceci est probablement ne répond pas à la question sous-jacente mais ...

2

Dans le code de votre formulaire:

Private isLoading As Boolean 

Private Sub Form_Open(Cancel as Boolean) 
    isLoading = True 
End Sub 

Private Sub Form_Current() 
    If isLoading Then 
     isLoading = False 
     Exit Sub 
    End If 
End Sub 

De cette façon, la première occurrence de l'événement OnCurrent lors de l'ouverture du formulaire sera ignorée.

Cela dit, il me semble que ce n'est pas votre vrai problème sous-jacent, mais vous aurez besoin de donner plus d'informations (ouvrir une autre question) si vous voulez que d'autres personnes pour essayer d'aider.

+0

Je pense que c'est ce que la solution de Simon est .. puis ajouter Form_Ferme ou form_deactive isloading = true? –

+0

Pas besoin d'ajouter quoi que ce soit lorsque le formulaire se ferme. Une fois fermé, l'objet est normalement détruit. Si vous le rouvrez à nouveau, un nouvel objet de formulaire sera créé avec toutes les valeurs initialisées. Les variables appartenant à un formulaire meurent avec. –

Questions connexes