IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Fermeture de l'application quelque soit la form ouverte [Débutant]


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2012
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 14
    Points : 9
    Points
    9
    Par défaut Fermeture de l'application quelque soit la form ouverte
    Bonjour,

    Je debute en C#. j'utilise visual C# 2010 express.
    J'aimerais naviguer entre 2 forms de la facon suivante.

    Form1:
    Clique sur item "Simple" d'un menu deroulant ouvre une form2.
    Si clique sur "X" de la fenetre, ferme l'application.

    Form2:
    Clique sur item "Advanced" d'un menu deroulant re-ouvre une form1.
    Si clique sur "X" de la fenetre, ferme l'application.

    J'ai deja trouve des resultats sur internet et dans differentes discussions. Mon probleme avec mon code actuel est que si je me trouve sur la form2 et que je ferme la fenetre, je reviens sur la form1 au lieu de fermer completement l'application.
    Je ne sais pas comment faire autrement.

    Form1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void advancedToolStripMenuItem_Click(object sender, EventArgs e)
            {
                frmAdvanCal form2 = new frmAdvanCal();
                this.Visible = false;
                form2.ShowDialog();
                this.Visible = true;
            }
    Form2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void simpleToolStripMenuItem_Click(object sender, EventArgs e)
            {
                this.Visible = false;
            }
    Est-ce que quelqu'un aurait des suggestions a me donner?

    Je vous remercie..

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Déjà, ShowDialog n'est pas adapté à ce que tu veux faire, c'est pour afficher une fenêtre modale. En fait il suffit de masquer une fenêtre et d'afficher l'autre. Pour quitter l'application, appelle Application.Exit dans l'évènement Closed (ou en overridant la méthode OnClosed).

    Voilà un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    class Program
    {
        static void Main()
        {
            Application.Run(new Form1());
        }
    }
     
     
    class Form1 : Form
    {
        private Button _btnAdvanced;
        private Form2 _form2;
     
        public Form1()
        {
            _form2 = new Form2(this);
            _btnAdvanced = new Button { Text = "Advanced" };
            _btnAdvanced.Click += _btnAdvanced_Click;
            this.Controls.Add(_btnAdvanced);
        }
     
        private void _btnAdvanced_Click(object sender, EventArgs e)
        {
            this.Hide();
            _form2.Show();
        }
     
        protected override void OnClosed(EventArgs e)
        {
            base.OnClosed(e);
            Application.Exit();
        }
    }
     
    class Form2 : Form
    {
        private Button _buttonSimple;
        private Form1 _form1;
     
        public Form2(Form1 form1)
        {
            _form1 = form1;
            _buttonSimple = new Button { Text = "Simple" };
            _buttonSimple.Click += _buttonSimple_Click;
            this.Controls.Add(_buttonSimple);
        }
     
        private void _buttonSimple_Click(object sender, EventArgs e)
        {
            this.Hide();
            _form1.Show();
        }
     
        protected override void OnClosed(EventArgs e)
        {
            base.OnClosed(e);
            Application.Exit();
        }
    }

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2012
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Merci Tomlev pour ta reponse!
    Je me suis basee sur ton example de code et j'ai obtenu ce que je cherchais..

    Voici ce que j'ai fait dans mon code si ca interesse d'autres personnes:

    Form1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void advancedToolStripMenuItem_Click(object sender, EventArgs e)
    {
                frmAdvanCal form2 = new frmAdvanCal();
                this.Hide();
                form2.Show(); 
    }
     
    private void frmSimpleCal_FormClosed(object sender, FormClosedEventArgs e)
    {
                Application.Exit();
    }
    Form2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void simpleToolStripMenuItem_Click(object sender, EventArgs e)
    {
                frmSimpleCal form1 = new frmSimpleCal();
                this.Hide();
                form1.Show();
    }
     
    private void frmAdvanCal_FormClosed(object sender, FormClosedEventArgs e)
            {
                Application.Exit();
            }

  4. #4
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Attention, lorsque tu navigues entre tes 2 formulaires, tu en crées à chaque fois un nouveau au lieu d'afficher celui qui est masqué. Si tu fais cela plusieurs fois, ton application va avoir plusieurs fenêtres qui vont restés masquées (et donc utiliser des ressources).
    Kropernic

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2012
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Griftou,

    Si je navigues entre mes 2 formulaires, dois-je utiliser la commande suivante
    comme le suggere Tomlev? Comment ne pas avoir plusieurs fenetres qui resteront masquees?

    Merci par avance....

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par perlerinette Voir le message
    Comment ne pas avoir plusieurs fenetres qui resteront masquees?
    En faisant comme dans le code que je t'ai montré. Tu crées une seule instance de chacune des fenêtres, et tu passes la première en paramètre de la deuxième pour qu'elle puisse re-afficher la première

  7. #7
    Futur Membre du Club
    Inscrit en
    Avril 2012
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Ah oui, j'avais pas bien fait attention au passage de form...
    Merci pour votre aide!

  8. #8
    Futur Membre du Club
    Inscrit en
    Avril 2012
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Bonjour a nouveau,

    Je suis toujours confronte a la fermeture de l'application.
    J'ai modifie mes fenetres avec des boutons precedent et suivant.
    J'ai donc 2 fenetres pour l'instant (j'en aurais 3 ou 4 au final):
    form1 : bouton suivant (qui va sur form 2)
    si click sur X, une fenetre demande la confirmation de la fenetre et selon le cas quitte l'application
    form2 : boutons precedent (qui retourne sur form1 ) et bouton suivant (que je n'utilise pas encore)
    si click sur X, une fenetre demande la confirmation de la fenetre et selon le cas quitte l'application

    J'ai suivi vos conseils en faisant passer en parametres les forms pour eviter que plusieurs fenetres s'ouvrent et soient masquees. Mais si je fais la sequence suivante par exemple:
    form1: suivant -> form2: precedent -> form1: suivant -> form2: X
    Je me retrouve a chaque fois avec 2 messages qui me demandent la fermeture au lieu de un seul..
    J'ai bien peur que si je rajoute une troisieme fenetre de navigation, il me faille confirmer 3 fois l'arret du programme. Seulement je ne vois pas mon erreur..

    Voila le code que j'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    static class Program
    {
        static void Main()
        {
            Application.Run(new Form1());
         }
    }
     
    public partial class Form1 : Form
    {
         private Form2 f2;
     
         public Form1()
         {
             InitializeComponent();
             f2 = new Form2(this);
         }
     
         private void btnNext_Click(object sender, EventArgs e)
         {
             this.Hide();
             f2.Show();
         }
     
         private void Form1_FormClosed(object sender, FormClosedEventArgs e)
         {
             DialogResult result = MessageBox.Show("Voulez-vous vraiment quitter ce programme?", "Attention!", MessageBoxButtons.YesNo);
             if (result == DialogResult.Yes)
             {
                 Application.Exit();
             }
         }
    }
     
    public partial class Form2 : Form
    {
         private Form1 f1;
     
         public Form2(Form1 frm1)
         {
             InitializeComponent();
             f1 = frm1;
         }
     
         private void Form2_FormClosed(object sender, FormClosedEventArgs e)
         {
             DialogResult result = MessageBox.Show("Voulez-vous vraiment quitter ce programme?", "Attention!", MessageBoxButtons.YesNo);
             if (result == DialogResult.Yes)
             {
                 Application.Exit();
             }
         }
     
         private void btnReturn_Click(object sender, EventArgs e)
         {
             this.Hide();
             f1.Show();
         }
    }
    Avez-vous une idee de ce qui cloche?

    Merci par avance..

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Quand tu fais Application.Exit, ça ferme toutes les forms qui sont ouvertes (y compris celles qui sont cachées), donc l'évènement FormClosed est appelé pour chacune des forms, c'est pour ça que le message s'affiche 2 fois. Il faut vérifier que le FormClosed est déclenché par l'utilisateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
         private void Form1_FormClosed(object sender, FormClosedEventArgs e)
         {
             if (e.CloseReason == CloseReason.UserClosing) // teste si c'est l'utilisateur qui ferme la Form
             {
                 DialogResult result = MessageBox.Show("Voulez-vous vraiment quitter ce programme?", "Attention!", MessageBoxButtons.YesNo);
                 if (result == DialogResult.Yes)
                 {
                     Application.Exit();
                 }
            }
         }

  10. #10
    Futur Membre du Club
    Inscrit en
    Avril 2012
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Ah chouette! ca marche!
    Donc si je rajoute une troisieme form, je dois verifier cette condition sur la deuxieme form aussi non?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (e.CloseReason == CloseReason.UserClosing)

  11. #11
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    tu dois vérifier cette condition sur tous tes formulaires car si j'ai bien compris, quand tu fais précédent, tu ne fais que masqué le formulaire actuel. Il est donc toujours là et demande aussi la confirmation de sa fermeture si tu ne vérifies pas cette condition.
    Kropernic

  12. #12
    Futur Membre du Club
    Inscrit en
    Avril 2012
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Merci pour votre aide!
    J'ai ajoute cette condition sur toutes les form et ca marche bien maintenant!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quel Layout pour une meuilleur mise en forme quelque soit le système d'exploitation?
    Par Klemsy78 dans le forum Agents de placement/Fenêtres
    Réponses: 0
    Dernier message: 15/03/2013, 17h53
  2. Mysql et fermeture de l'application
    Par fredero dans le forum Bases de données
    Réponses: 3
    Dernier message: 08/05/2005, 20h16
  3. [Event]Annuler la fermeture d'une application
    Par willowII dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 16/11/2004, 09h28
  4. Problème de fermeture de l'application
    Par SkyDev dans le forum Langage
    Réponses: 2
    Dernier message: 16/06/2004, 02h06
  5. bouton ENTER = fermeture de l'application
    Par bigboomshakala dans le forum MFC
    Réponses: 2
    Dernier message: 10/05/2004, 11h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo