Eviter de charger plusieurs fois le même form

Résolu
Signaler
Messages postés
116
Date d'inscription
mardi 8 août 2006
Statut
Membre
Dernière intervention
29 septembre 2013
-
Messages postés
116
Date d'inscription
mardi 8 août 2006
Statut
Membre
Dernière intervention
29 septembre 2013
-
Bonsoir !

Dans une application MDI, comment faire pour éviter de charger plusieurs fois le même formulaire.
Je pourrais désactiver l'option dans le menu de la MDIForm, mais c'est pas beau !
J'ai une fonction qui permet de vérifier si un formulaire est chargé:

Function IsLoaded(ByRef frm As Form) As Boolean
    Dim f As Form
    For Each f In Forms
        If f Is frm Then
            IsLoaded= True
            Exit For
        End If
    Next
   End Function

Lorsque l'utilisateur ouvre la fiche "Commandes" (par exemple), je vérifie d'abord si le form est chargé: dans form_initialize, je fais IsLoaded(FrmOrder). Et c'est ici que ca coince: comment éviter l'événement Load si IsLoaded m'a renvoyé VRAI  ??
J'ai essayé de placer ce test dans l'événement Load() : la réponse est toujours Vrai !
Ce que je voudrais :
   - Si le fomulaire n'est pas chargé, qu'il se charge (ça, ça fonctionne)
   - Si le formulaire est minimisé, qu'il reprenne sa taille originale avec le focus
   - Si le formulaire est à l'arrière-plan, qu'il gagne le focus
   - si le formulaire a le focus et qu'il n'est pas minimisé, évidemment rien
Merci de votre aide
Jessica

6 réponses

Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
chaibat05.... pas obligatoire d'ajouter cette ligne, un Boolean est a False par défaut, en VB


pour tester la présence d'une Form, il est plus simple de se baser sur son nom.... on évite ainsi de la charger pour rien.


en ce qui concerne ta demande précise, tu peux simplement faire, par exemple :


Form1.Show

If Form1.WindowState = vbMinimized Then

    Form1.WindowState = VbNormal

End If
Form1.SetFocus

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
116
Date d'inscription
mardi 8 août 2006
Statut
Membre
Dernière intervention
29 septembre 2013

Pour Chaibat05
Ca fonctionne la première fois que je lance le programme. Mais si je referme la fenêtre, je peux à nouveau la rouvrir plusieurs fois. Mais j'ai compris pourquoi et j'ai adapté le code en conséquence:

Private Sub mnuDatafrmFiche_Click()
'  Dim f As New frmFiche    mis en commentaire
  If IsLoaded(frmFiche) = False Then Load frmFiche
'  f.Show                              mis en commentaire
  End Sub

Un tout grand MERCI !!!
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Bonsoir,
Il suffit de palcer ta fonction IsLoaded dans ta MDI,
et de tester :
If IsLoaded(MaChild)=False Then Load MaChild. 
 
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Autre chose
Function IsLoaded(ByRef frm As Form) As Boolean
 'Ajouites  
  IsLoaded=False 'Il faut toujours initialiser une fonction

 Dim f As Form
    For Each f In Forms
        If f Is frm Then
            IsLoaded= True
            Exit For
        End If
    Next
   End Function
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Salut,

Essaie comme ceci


If Not IsLoaded(frmOrder) then Load frmOrder  'Load si pas déjà fait

frmOrder.WindowState = vbNormal   '(ou vbMaximized) 

frmOrder.show

MPi
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
@Renfield,
entièment d' accord. C' est juste une habitude à encourager.
A+