Detecter si une form est ouverte

Signaler
Messages postés
666
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
Bonjour

Voici la situation et ma question

Dans une form Form1
Dans une fonction J'ouvre une fenetre de dialogue non modale Form2 et lui passe une datatable dans le constructeur

A tout moment dans Form1 je peux repasser par la fonction d'ouverture pour envoyer une autre datatable

A part passer par des flags public comment savoir proprement que la form2 est déja ouverte pour eviter d'en ouvrir une autre ou la fermer si nécessaire !<!-- / message -->

5 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
Salut,

Si Form2 (au passage, tu devrais peut être mettre de vrais noms) ne doit posséder qu'une seule instance dans l'application, tu peux passer par un singleton.

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
666
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
5
Merci Coq

Bien sur dans mon app ce sont des vrais nom

frmZoom
frmDgvZoom

Mais pour la synthese d'une question c'est parfois plus facile d'abstraire Form1 et Form2

Cela étant
1- Singleton : je n'ai jamais employé, comment puis-je declarer une form singleton ?
2- Si j'ai déclaré ma form singleton que se passe-t-il  si je refais une deuxieme fois
frmDgvZoom fDZ = new frmDgvZoom ()

Cette form est un petit dialogue que ne n'ouvre que dans un certain contexte
Explication
Dans la forme principale l'utilisateur peu cliquer sur un element pour avoir la liste de tous les éléments liés
Dans ce cas j'ouvre frmDgvZoom en passant la datatable de ces element et j'affiche un DGV que l'utilisateur peut parcourir pour afficher ces elements dans la form principale
A tout moment l'utilisateur peut cliquez un AUTRE elément dans la forme principale a ce moment je dois charger le meme dialogue avec une nouvelle datatable et eventuellement faire un clear de differentes choses

Mais si l'utilisateur ferme lui meme le dialogue je peux appeler le clear de maniere explicite.
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
C'est un pattern dont le but est de n'avoir qu'une seule et unique instance du type dans l'application (enfin, dans le domaine d'application plus précisément), le constructeur n'est pas censé accessible de l'extérieur de celui ci (ce qui répond à ta seconde question).
http://msdn.microsoft.com/en-us/library/ms998558.aspx

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
666
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
5
Merci Coq

A mon avis aujourd'hui je suis trop idiot ou je n'ai pas encore asse d'expèrience pour comprendre ce truc
Je vois pas du tout comment pratiquement je déclare une Form singleton
En plus si je comprends bien, elle s'intancie une fois et reste présente dans toute l'application.
Ce n'est pas le but, je dois l'ouvrir quand j'en ai besoin pouvoir la fermer depuis une autre form ou laisser l'utilisateur la fermer lui meme

Je me demande vraiment si utiliser un flag me disant si elle est ouverte n'est pas la bonne solution.
Mais ca ne m'aide toujours pas a savoir comment la retrouver depuis form1 pour la refermer si nécessaire.

Finalement la question se resume a ca :
Comment trouver dans une application si une form est instanciée et agir en conséquence !
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
Dans ce cas Application.OpenForms correspond probablement plus au besoin.

/*
coq
MVP Visual C#
CoqBlog
*/