Comment vérifier si une form existe

Résolu
Signaler
Messages postés
19
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
19 août 2006
-
Messages postés
19
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
19 août 2006
-
Voila j'utilise le code suivant pour dupliquer et indexer une form :



Dim Form() as Form1
dim i as integer

redim Form(1 to 10) as form1
set Form(i) = new form1
Form(i).caption = Titre (i)
Form(i).show

Le truc c'est que si par exemple la form(3) existe déja quand je demande de la créer, il en créé une nouvelle et je ne peux plus controler l'ancienne en utilisant form(3).

En gros ma question c'est comment vérifier l'existance d'un form avant de la créer?

Merci

5 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
C'est ce que je te disait, dans le cas de cet exemple, le tableau ne sert à rien.

Si tu met ce code tel quel dans une procédure, le tableau est recréer et redimentionné à chaque appel de la procédure. A la fin de la procédure, il est automatiquement détruit, et tu perd donc les références sur tes fenetres.

Au premier appel, tu crée la form n°1. A la fin de la procedure, tu perd la référence à cette form. Donc au second appel, ton tableau venant d'etre créé, est parfaitement vierge. Tu vas donc créer une "seconde" form n°1.

Il faudrait que tu déclare ton tableau en variable globale, que tu le dimentionne 1 seule fois dans une phase d'initialisation voire directement à la déclaration.

Ensuite dans la procedure que tu appele pour créer les forms, tu ne garde que ce qui est entre le If et le End If

Sevyc64  (alias Casy)
<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
19
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
19 août 2006

Oui effectivement je m'en suis apperçu en essayent de mieux comprendre le code (il est pas de moi ).

Donc je viens de trouver une solution un peu boucher :

Dim Form(99) As Form2

Private Sub Command2_Click()
    On Error Resume Next
    Unload Form(3)
    Form(3).Caption = "Titre3"
    Form(3).Show
    End If
End Sub

Unload Form(3) me génère une erreur si la form(3) n'existe pas encore donc j'avais rajouté un On Error Resume Next.

Puis du coup j'ai réessayé ta solution à toi :

Dim Form(99) As Form2

Private Sub Command2_Click()
    If Form(3) Is Nothing Then
    Set Form(3) = New Form2
    Form(3).Caption = "Titre3"
    Form(3).Show
    End If
End Sub

Et la miracle ça marche
Merci !
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Déjà, tu peux essayer comme ça

Dim Form() as Form1
dim i as integer

redim Form(1 to 10) as form1
If Form(i) Is Nothing Then
    set Form(i) = new form1
    Form(i).caption = Titre (i)
    Form(i).show
end if

Et au passage, je sais pas si le code que tu donne est juste un exemple, mais tu risque d'avoir un problème d'indices. Deplus ton tableau ne sert à rien dans ce cas là.

Sevyc64  (alias Casy)
<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
19
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
19 août 2006

Non c'est juste un exemple, je remplace le i par une valeur quelquonque.

Bon sinon le test If Form(i) Is Nothing Then est accepté (pas de message d'erreur)
par contre ça ne marche pas, si je lui redemande d'ouvrir une fenetre avec le meme indice, il me l'ouvre quand même.

Merci quand même
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
49
salut,
essaye avec un tableau de type (form / boolean <- existance)

++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp