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 :

Atteindre une méthode d'une Form à partir d'une autre Form


Sujet :

Windows Forms

  1. #1
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut Atteindre une méthode d'une Form à partir d'une autre Form
    Bonjour tout le monde.

    J'ai 2 Forms, ParentForm et ChildForm. Dans ChildForm, je veux atteindre une méthode définie dans ParentForm.

    Donc, ce que j'ai fait, c'est faire appel à une nouvelle instance de ParentForm dans ChildForm :

    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
     
     
    private ParentForm parentForm = new ParentForm();
     
    private void ChildForm_FormClosing(object sender, FormClosingEventArgs e)
            {
     
     
                if (e.Cancel == false)
                {
     
                   parentForm.StartProcedure();
     
                }
            }
    Au début, cela fonctionnait bien, ma méthode était bien appelée. Mais il s'est avéré que faire cette instance rajoutait donc à chaque fois une nouvelle Form, mais PHYSIQUEMENT.

    En gros, le bug qui arrivait, était que quand je réduisais la ParentForm dans le SysTray, on avait 2 icônes au lieu d'1.
    Je réouvre ma ChildForm, je la referme, je réduis ma ParentForm, et hop 3 icônes, et ainsi de suite...

    J'ai donc essayé de trouver une parade, en utilisant la méthode de la FormParent et en fermant ensuite cette dernière :

    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
     
    private ParentForm parentForm = new ParentForm();
     
    private void ChildForm_FormClosing(object sender, FormClosingEventArgs e)
            {
     
     
                if (e.Cancel == false)
                {
     
                   this.parentForm.StartProcedure();
                   this.parentForm.Close();
     
                }
            }
    Mais le bug est que quand je fais ceci, tout plante, j'ai un évènement de timer sur ma ParentForm qui n'est plus jamais déclenché. Par contre, quand je réduis ma ParentForm, il n'y a plus qu'1 icône dans le SysTray (le seul point positif ).

    J'ai pensé mettre ma méthode StartProcedure dans une classe à part où l'on pourrait l'utiliser, mais le gros hic c'est que cette méthode StartProcedure fait appel à des méthodes définies dans ParentForm, et que donc c'est le bazar...

    Comment faire sachant que cette méthode ne sera utilisée qu'une seule fois dans ChildForm ?

    Edit: Je débute en WinForm.

    Merci de votre aide.

  2. #2
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par Ishizaki Voir le message
    Edit: Je débute en WinForm.
    sans vouloir te vexer, ça se voit

    Si j'ai bien compris : t'as une form f1 qui ouvre une form f2, et tu veux lancer une méthode de f1 à la fermeture de f2.

    J'ai bon ?

    Si c'est le cas, deux possibilités. Ou bien F1 ouvre F2 en ShowDialog (i.e. F1 est inaccessible tant que F2 est ouverte), auquel cas tu peux faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class F1
    {
    ...
    using (F2 f2 = new F2())
    {
      f2.ShowDialog();
    }
      this.StartProcedure();
    Sinon, si c'est f2.Show, tu peux t'abonner à l'événement f2.FormClosing.

  3. #3
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Et en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ( (ParentForm)ChildForm.Parent ).StartProcedure();
    Ça ne pourrait pas fonctionner ?

  4. #4
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    Merci de vos réponses ^^ !

    J'ai opté pour cette solution :

    Dans ParentForm:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private void ShowChildForm()
            {
                ChildForm childForm = new ChildForm();
     
                if (ChildForm.ShowDialog(this) == DialogResult.OK)
                {
                    this.StartProcedure();
                }
            }
    En gros je lance ma procédure si la fermeture de ChildForm ne s'est pas faite sur le clic de la croix.

    Merci de votre aide ! Vos solutions sont très intéressantes !

  5. #5
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    De rien Généralement, en POO, il vaut mieux essayer de découper son appli en "modules" à peu près indépendant. En l'occurrence, ta form fille n'a pas à connaître sa Form mère ; le seule chose qu'elle doit faire, c'est dire comment elle a fini (via le DialogResult), pour que la form mère agisse en conséquence.

  6. #6
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    Citation Envoyé par Guulh Voir le message
    De rien Généralement, en POO, il vaut mieux essayer de découper son appli en "modules" à peu près indépendant. En l'occurrence, ta form fille n'a pas à connaître sa Form mère ; le seule chose qu'elle doit faire, c'est dire comment elle a fini (via le DialogResult), pour que la form mère agisse en conséquence.

    Ouaip, j'ai compris la structure à appliquer (plus habitué à Asp.Net).

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/04/2009, 09h13
  2. Réponses: 2
    Dernier message: 16/10/2008, 08h52
  3. Réponses: 6
    Dernier message: 12/02/2008, 14h56
  4. Réponses: 4
    Dernier message: 21/04/2006, 22h08
  5. [C#] appeler Close() d'un form à partir d'un autre form
    Par vvvvv dans le forum Windows Forms
    Réponses: 4
    Dernier message: 06/02/2006, 18h36

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