begin process at 2010 02 10 02:28:50
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Windows

 > 

Formulaire / Winforms / Controls

 > 

Empêcher un formulaire de s'ouvrir plus d'une fois.


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Empêcher un formulaire de s'ouvrir plus d'une fois.

jeudi 2 juillet 2009 à 16:22:18 | Empêcher un formulaire de s'ouvrir plus d'une fois.

BelleisaTQ

Bonjour,

J'ai un formulaire parent avec menustrip qui lorsque l'on clique sur un choix, ouvre un formulaire enfant.Pour empêcher le formulaire enfant d'ouvrir plus d'une fois, j'ai créer une variable "public static Form _instance = null;"
qui me permet de savoir si le formulaire enfant est déjà ouvert. Mon problème survient lorsque je ferme le formulaire enfant et que je désire le réouvrir par la suite. Comme ma variable n'est plus null, il ne s'ouvre pas.

Auriez-vous une idée ?

voici mon petit bout de code :

private void casesHorairesToolStripMenuItem_Click(object sender, EventArgs e)
        {
                if (_instance == null)
                {
                    _instance = new frmCaseHoraire();
                    afficherFormulaire(new frmCaseHoraire());
                }
        }


Merci.
jeudi 2 juillet 2009 à 16:36:14 | Re : Empêcher un formulaire de s'ouvrir plus d'une fois.

Psych0

Tu peux t'abonner sur l'évènement FormClosed de ton formulaire, et dans la méthode lancée à ce moment là, setter ton instance à null.

if (_instance == null)
{
                    _instance = new frmCaseHoraire();
                    _instance.FormClosing += new EventHandler(fermeture_formulaire);
                    afficherFormulaire(new frmCaseHoraire());
}

private void fermeture_formulaire(object sender, EventArgs e)
{
                    _instance = null;
}
jeudi 2 juillet 2009 à 16:48:19 | Re : Empêcher un formulaire de s'ouvrir plus d'une fois.

BelleisaTQ

Merci,

mais j'ai encore ce problème qui m'apparaît :Cannot implicitly convert type 'System.EventHandler' to 'System.Windows.Forms.FormClosingEventHandler'

Sur cette ligne :
_instance.FormClosing += new EventHandler(fermeture_formulaire);

Je ne comprend pas...

Merci de m'aider.
jeudi 2 juillet 2009 à 21:05:49 | Re : Empêcher un formulaire de s'ouvrir plus d'une fois.

Psych0

Autant pour moi.
C'est juste que l'événement lancé lors du formClosing n'a pas la forme habituelle :

EventHandler myEvent(object sender, EventArgs e)

Mais requiert un handler qui dérive d'EventHandler, celui mentionné dans le message d'erreur, un FormClosingEventHandler.

Mais rassure toi, tu n'as pas besoin de retenir par coeur quel type d'handler est associé à tel événement, si tu utilises Visual Studio pour tes développements, lorsque tu tappes _instance.FormClosing += l'intellisense va te proposer automatiquement l'eventhandler qu'il faut, il te suffit dès lors de pousser 2x sur TAB pour qu'il s'abonne à l'événement et qu'il te crée la méthode qui sera lancée lorsque l'événement se produira.
jeudi 2 juillet 2009 à 21:23:42 | Re : Empêcher un formulaire de s'ouvrir plus d'une fois.

BelleisaTQ

Merci de me répondre. J'ai trouvé pour le handler dans le formulaire parent  mais ça ne fonctionne pas car lors de la fermeture du formulaire enfant l'évènement n'est pas appelé.

Voici mon code :

private void casesHorairesToolStripMenuItem_Click(object sender, EventArgs e)
        {
          
            if (_instance == null)
            {
                _instance = new frmCaseHoraire();
                _instance.FormClosing += new FormClosingEventHandler (_instance_FormClosing);
                afficherFormulaire(new frmCaseHoraire());
            }
        }

        private void _instance_FormClosing(object sender, FormClosingEventArgs e)
        {
                        _instance = null;

        }

Est-ce que je dois ajouter quelque chose dans le formulaire enfant ?

Merci pour tout.
vendredi 3 juillet 2009 à 00:21:01 | Re : Empêcher un formulaire de s'ouvrir plus d'une fois.

Lutinore

Administrateur CodeS-SourceS
Réponse acceptée !
Salut,

L'idée de maintenir une variable statique n'est pas mal mais ça impose de la mettre à null à la fermeture de la forme, surtout pour libérer la mémoire.

Peut être que dans ton cas un Dialog serait mieux.. on affiche un Dialog avec ShowDialog( ) à la place de Show( ) et on libère la mémoire avec Dispose( ).

Une autre solution assez simple :

if ( Application.OpenForms[ "Form2" ] == null )
{
    Form f = new Form( );
    f.Name = "Form2";
    f.Show( );
}
vendredi 3 juillet 2009 à 15:51:16 | Re : Empêcher un formulaire de s'ouvrir plus d'une fois.

BelleisaTQ

Merci pour vos bons conseils !!!

Bonne journée.


Cette discussion est classée dans : ouvrir, formulaire, instance, enfant, empêcher


Répondre à ce message

Sujets en rapport avec ce message

form generique [ par zncpo ] bonjour, je voudrais ouvrir un formulaire avec son nom. en gros g le nom du formulaire en variable et j'aimerai pouvoir ouvrir une instance de ce for Ouvrir deux formulaires simultanément et... [ par Ean19 ] ...donner le focus au formulaire qui n'est pas le formulaire contenu dans Application.Run?C'est-à-dire, un "sous"-formulaire qui va servir à s'identif ouvrir une form enfant dans un thread différent [ par bossun ] salut,Dans une appli MDI, ne veux ouvrir mes feilles enfants dans un thread différent à chaque fois. donc je voudrais utiliser le backgroudnworker pou ouvrir une fenetre dans un autre processus [ par bouloum ] Bonjour,Je voudrais ouvrir une fenetre enfant "child window" dans un autre processus. Ex: Ouvrir une fenetre texte qui s'affiche comme enfant dans un Pb Fermeture formulaire enfant [ par Caro2005 ] J'ai un formulaire Parent qui correspond à mon menu général. Dans ce formulaire, j'ai une option qui permet d'ouvrir un formulaire enfant. Dans le lo 2 menus dans un formulaire parent [ par reythierry ] Salut à tous.J'ai un formulaire parent Mdi avec 2 mainMenu différents.Lorsque j'ouvre une fenêtre enfant ( type formulaire texte) je charge mainMenu1 Au clic sur F1 Ouvrir un formulaire d'aide [ par Juju1988 ] Bonjour, Je cherche lorsque l'utilisateur appuie sur le bouton F1 à ouvrir un formulaire d'aide. J'ai essayé ce code : private void frmCommi [C#] Impression d'un formulaire [ par Vapula ] Bonjour, Je débute en C#, je voudrais savoir comment peut on imprimer un Form J'ai un Form qui contient divers Label, TextBox, GroupBox, Button, . MDI : problemes [ par MickParadiseLost ] Bonjour, j'ai créé un formulaire principal et ai mi sa propriété MDI  a true. Form2 est le formulaire qui s'ouvre dans le formulaire principal. Form2 ouvrir et fermer un port de communication [ par stoukou ] bonjour saviez vous le code c# qui permet d'ouvrir et fermer un port du communication mercistoukou


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales