Eviter de charger plusieurs fois le même form

Résolu
JessicaR44 Messages postés 116 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 29 septembre 2013 - 9 août 2006 à 22:30
JessicaR44 Messages postés 116 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 29 septembre 2013 - 10 août 2006 à 00:34
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

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 août 2006 à 00:02
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
3
JessicaR44 Messages postés 116 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 29 septembre 2013
10 août 2006 à 00:34
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 !!!
3
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
9 août 2006 à 23:32
Bonsoir,
Il suffit de palcer ta fonction IsLoaded dans ta MDI,
et de tester :
If IsLoaded(MaChild)=False Then Load MaChild. 
 
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
9 août 2006 à 23:35
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
9 août 2006 à 23:35
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
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
10 août 2006 à 00:11
@Renfield,
entièment d' accord. C' est juste une habitude à encourager.
A+
0
Rejoignez-nous