locked
Récupérer l'instance du windows Form parent RRS feed

  • Question

  • Dans un windows Form "FormAppelé" je souhaite obtenir l'instance du windows form appelant "FormAppelant".

    je n'ai pas trouvé de solution avec Owner et/ou OwnedForms.

     

    Existe-il une méthod permettant dans le code du "FormAppelé" de récupérer l'instance du "Formappelant" ?

     

    Pour l'instant je n'ai pas trouvé de solution autre que :

    Dans le windows Form appelant :

     

    namespace MonApplication

    {

    public partial class FormAppelant : Form

    {

    static FormAppelé myFormAppelé;

    private Form InstanceForm;

     

    public FormAppelant()

    {

    InstanceForm = this;

    InitializeComponent();

    }

    .

    .

    myFormAppelé = new Formappelé(ref InstanceForm);

    myFormAppelé.Show();

    .

    .

    }

    }

     

    et Dans le FormAppelé :

     

    namespace MonApplication

    {

    public partial class FormAppelé : Form

    {

    private static Form InstanceParentForm;

    // Constructeur de la Class

    public Debug(ref Form InstanceForm)

    {

    InstanceParentForm = InstanceForm;

    InitializeComponent();

    }

     

    dans le code de cette class je peux faire référence à l'instance du FormAppelant

    comme par exemple :

    InstanceParentForm.Name

    InstanceParentForm.DesktopBounds

    .

    .

    }

    }

     

    Je cherche une méthode ou propriété qui me permette dans le FormAppelé de récupérer l'instance du FormAppelant.

     

    Merci pour vos réponses

    samedi 27 décembre 2008 18:13

Réponses

  • Bonjour,

    comme solution vous pouvez utiliser la propriété Owner en la renseignant avec la form appelant avant de faire le .Show de votre form appelée, comme ceci :

    Code Snippet

    FormAppelé myFormAppelé = new FormAppelé();
    myFormAppelé.Owner = this;
    myFormAppelé.Show();



    et ensuite vous pouvez récuperer la form appelant dans votre form appelé de cette manière :

    Code Snippet

    InstanceParentForm = this.Owner;



    En esperant avoir pu vous aider.
    lundi 29 décembre 2008 09:28
  • Bonsoir,

     

    Merci pour votre réponse.

    Ce que vous proposez marche parfaitement bien sûr.

    Mais cela ne correspond pas à mon besoin.

    En effet, l'assignation myFormAppelé.Owner = this; , ne peut se faire qu'aprés le constructeur FormAppelé();.

    Ce qui est tout a fait logique.

    L'instance du Form appelant est récupérable par InstanceParentForm = this.Owner; , uniquement aprés éxécution du constructeur, comme par exemple dans l'évènement Load du Form Appelé.

    Mais j'ai absolument besoin de l'instance du Form Appelant dans le constructeur du FormAppelé, car en autres, c'est le FormAppelé qui initialise l'évènement "FormClosing" du FormAppelant par :

    InstanceParentForm.FormClosing += new FormClosingEventHandler(FermetureFenêtreAppelante);

    Bien sur cette EventHandler peut-être mis en place dans l'évènement Load du FormAppelé.

    Mais si le FormAppelé ne fait appel que au constructeur puis fait Exit, l'évènement Load du FormAppelé n'est pas exécuté et c'est le FormClosing standard de Windows qui est éxécuté.

    Je suis donc revenu à ma solution de base :

    Dans le form appelant :

     

    InstanceForm = this;

    FormAppelé myFormAppelé = new FormAppelé(ref InstanceForm);

     

    Et dans le constructeur du FormAppelé :

     

    public FormAppelé ( ref Form InstanceForm)

    {

    InstanceParentForm = InstanceForm;

    InstanceParentForm.FormClosing += new FormClosingEventHandler(FermetureFenêtreAppelante);

    InitializeComponent();

    }

    Je pensais trouver une méthode qui dans le FormAppelé, sans rien faire dans le FormAppelant, me donnerai l'instance du Form appelant.

     

    Merci, néanmoins pour votre aide.

    Cordialement

    lundi 29 décembre 2008 18:27

Toutes les réponses

  • Bonjour,

    comme solution vous pouvez utiliser la propriété Owner en la renseignant avec la form appelant avant de faire le .Show de votre form appelée, comme ceci :

    Code Snippet

    FormAppelé myFormAppelé = new FormAppelé();
    myFormAppelé.Owner = this;
    myFormAppelé.Show();



    et ensuite vous pouvez récuperer la form appelant dans votre form appelé de cette manière :

    Code Snippet

    InstanceParentForm = this.Owner;



    En esperant avoir pu vous aider.
    lundi 29 décembre 2008 09:28
  • Bonsoir,

     

    Merci pour votre réponse.

    Ce que vous proposez marche parfaitement bien sûr.

    Mais cela ne correspond pas à mon besoin.

    En effet, l'assignation myFormAppelé.Owner = this; , ne peut se faire qu'aprés le constructeur FormAppelé();.

    Ce qui est tout a fait logique.

    L'instance du Form appelant est récupérable par InstanceParentForm = this.Owner; , uniquement aprés éxécution du constructeur, comme par exemple dans l'évènement Load du Form Appelé.

    Mais j'ai absolument besoin de l'instance du Form Appelant dans le constructeur du FormAppelé, car en autres, c'est le FormAppelé qui initialise l'évènement "FormClosing" du FormAppelant par :

    InstanceParentForm.FormClosing += new FormClosingEventHandler(FermetureFenêtreAppelante);

    Bien sur cette EventHandler peut-être mis en place dans l'évènement Load du FormAppelé.

    Mais si le FormAppelé ne fait appel que au constructeur puis fait Exit, l'évènement Load du FormAppelé n'est pas exécuté et c'est le FormClosing standard de Windows qui est éxécuté.

    Je suis donc revenu à ma solution de base :

    Dans le form appelant :

     

    InstanceForm = this;

    FormAppelé myFormAppelé = new FormAppelé(ref InstanceForm);

     

    Et dans le constructeur du FormAppelé :

     

    public FormAppelé ( ref Form InstanceForm)

    {

    InstanceParentForm = InstanceForm;

    InstanceParentForm.FormClosing += new FormClosingEventHandler(FermetureFenêtreAppelante);

    InitializeComponent();

    }

    Je pensais trouver une méthode qui dans le FormAppelé, sans rien faire dans le FormAppelant, me donnerai l'instance du Form appelant.

     

    Merci, néanmoins pour votre aide.

    Cordialement

    lundi 29 décembre 2008 18:27