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 :

Problème avec 2 forms


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Points : 57
    Points
    57
    Par défaut Problème avec 2 forms
    Bonjour à tous!

    J'ai un petit problème avec mon projet qui utilise 2 forms.
    La première me sert de fenêtre d'initialisation où l'utilisateur règle plusieurs options. Ensuite celui-ci clique sur un bouton de validation et la deuxième form est lançée.
    Je souhaiterai que la première form soit détruite et qu'il n'y ai plus que la deuxième.
    Cependant je n'y suis pas arrivé et j'ai fait un truc un peu batard :
    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
     
    //Dans Form1
    private void buttonValid_Click(object sender, EventArgs e)
    {
                    Form2 maForm2 = new Form2();
                    maForm2.Owner = this;
                    maForm2.Show();
                    //Solution a la con : je cache la première fenêtre
                    this.Hide();
    }
    //Etant donné que la form1 est hide cette méthode est appelé quand la form2 est fermé
    public void FermetureFromForm2()
    {
                this.Close();
    }
     
     
    //Dans form2
    private void Form2_FormClosed(object sender, FormClosedEventArgs e)
    {
                Form1 maform1 = (Form1)this.Owner;
                maform1.FermetureFromForm2();
    }
    Quand je ferme la deuxième fenêtre j'ai le droit a un beau plantage! Cependant je n'ai pas d'autre solution...
    Si quelqu'un peu me proposer une solution plus propre je suis preneur!
    Merci d'avance.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Salut,

    dans le callback du click, si tu remplace this.Hide() par Close, ca ne devrait pas planter et ca devrait faire ce que tu souhaites. Quel est le probleme quand tu fermes la premiere fenetre ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Points : 57
    Points
    57
    Par défaut
    Merci pour ta réponse!
    Lorsque je change this.Hide par this.Close j'ai une erreur à la ligne:
    this.Close(); dans FermetureFromForm2()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Une exception non gérée du type 'System.StackOverflowException' s'est produite dans System.Windows.Forms.dll
    Ce qui est bisard c'est qu'il lance directe FermetureFromForm2 alors que je ne ferme pas la deuxième form!

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Regarde ta pile d'appel quand tu recuperes l'exception, et regardes ce qui te fait exploser la pile. Ca sent l'appel recrusif.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 46
    Points : 55
    Points
    55
    Par défaut
    Bonjour,

    Il est normal que quand tu changes this.Hide par this.Close tu ais une erreur à la ligne:
    this.Close(); dans FermetureFromForm2()

    En effet tu instancie ta form2 au sein de ta form1 donc ta form2 appartient à ta form1 si tu close ta form1, tu close par la force des chose ta form2.

    tu as une astuce qui consiste à laisser ton form1.Hide();

    puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    //Dans form2
    private void Form2_FormClosed(object sender, FormClosedEventArgs e)
    {
                Application.exit();
    }
    C'est un peu crado mais sans passer par une classe qui contiendrait tout les paramètres définis dans ta form1 puis accessible à ta form2 je vois rien d'autre.

    Bigy

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 240
    Points : 254
    Points
    254
    Par défaut
    Il semble que ta Form principale soit la Form 2 ...
    Pourquoi ne la mets tu pas en Form 1 ? (et ta Form servant a paramêtrer l'appli en Form 2)
    Au démarrage, active immédiatement ta Form 2 et basarde la une fois pour toute une fois utilisée ...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Points : 57
    Points
    57
    Par défaut
    Merci pour toutes ces réponses!


    Citation Envoyé par Totanne Voir le message
    Au démarrage, active immédiatement ta Form 2 et basarde la une fois pour toute une fois utilisée ...
    J'ai changé de form principale : dans mon program.cs j'ai donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application.Run(new Form2());
    Et j'ai essayé de lancer la form pour parametrer l'appli avant l'affichage de la form2, le problème c'est que même si je fais un this.Hide() sur la form principale, ça l'affiche quand même.
    Ca donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //Dans form2 qui est ma fenetre principale
    Form1 FormParametre = new Form1();
     
    //Avant le InitComponent de la form2 
    FormParametre.Activate();
    FormParametre.Show();
     
    this.Hide();
    J'ai testé aussi de faire ça pendant l'evenement Load de form2 mais ça ne change rien!

    Sinon avec l'astuce de Bigyork ça marche mais c'est vrai que c'est pas super clean!

  8. #8
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Si tu ne veux pas que ta forme principale soit affichée avant la fenêtre de paramétrage, il suffit d'afficher la fenêtre de paramétrage dans le constructeur de la forme principale plutot que dans l'événement Load.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par SaumonAgile Voir le message
    Si tu ne veux pas que ta forme principale soit affichée avant la fenêtre de paramétrage, il suffit d'afficher la fenêtre de paramétrage dans le constructeur de la forme principale plutot que dans l'événement Load.
    Quand je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //Constructeur de ma form principale
    FormParam fParam = new FormParam();
    fParam.Activate();
    fParam.Show();
     
    //Il faudrai une instruction bloquante ici en attendant l'activation coté form param!!
    ça affiche quand même les deux forms. J'aimerai juste que la form principale s'affiche une fois que l'utilisateur à appuyé sur le bouton "Ok" de la form de configuration.
    J'ai essayé aussi dans lançer le InitComponent() de la form principale une fois le bouton "Ok" de la form de paramétrage activer.
    Le problème c'est que la form principale est afficher quand même mais sans les composants dedans!

  10. #10
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Bah, alors pourquoi tu n'affiches pas ta fenêtre en modale avec ShowDialog ?
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Salut,

    essaie comme ceci :

    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
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                this.Load += new EventHandler(Form1_Load);
            }
     
            void Form1_Load(object sender, EventArgs e)
            {
                using (Form f = new Form())
                {
                    f.Text = "Config Window";
                    f.ShowDialog();
                }
     
            }
     
        }
    Tu peux recuperer des elements de la fenetre de settings dans le using, une fois cette derniere fermé, la fenetre principale s'affichera.

    edit : Grillé !

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Points : 57
    Points
    57
    Par défaut
    Nikel!
    Merci pour vos réponses.

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

Discussions similaires

  1. problème avec <html:form>
    Par s.mustapha86 dans le forum Struts 1
    Réponses: 22
    Dernier message: 14/07/2008, 11h57
  2. Problème avec la Form Principale
    Par zagmoh dans le forum C++Builder
    Réponses: 3
    Dernier message: 10/06/2007, 23h15
  3. Problème avec document.forms
    Par Kernald dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 25/02/2007, 12h15
  4. Problème avec HTML::Form
    Par Woufeil dans le forum Web
    Réponses: 1
    Dernier message: 05/06/2006, 13h59
  5. problème avec les forms 6i!
    Par JauB dans le forum Oracle
    Réponses: 2
    Dernier message: 07/11/2005, 08h33

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