2011-03-26 4 views
5

J'ai un problème simple: J'ai un formulaire principal dans win-forms/C#. Il a une zone de liste liée à une base de données.Accès au formulaire principal à partir du formulaire enfant

Lorsque je clique sur un bouton, un nouveau formulaire est créé. Lorsque je clique sur un bouton du formulaire enfant, je souhaite appeler une méthode qui existe dans le formulaire principal, qui met à jour la zone de liste ou, à la fermeture du formulaire enfant, pour appeler cette fonction.

Est-ce possible?

+0

essayez-vous d'implémenter une boîte de dialogue contenant les boutons 'Save' et' apply'? – manji

Répondre

6

Scénario 1: Appel d'une méthode dans le formulaire parent à l'aide du bouton du formulaire enfant.

Créez un Event au format enfant. Soulevez cet événement sur un clic de bouton, etc. Abonnez-vous à cet événement dans votre formulaire parent et appelez la méthode de formulaire du parent à l'intérieur.

Scénario 2: appelez une méthode dans le formulaire parent lorsque le formulaire enfant est fermé.

Gérez l'événement FormClosed ou FormClosing du formulaire enfant dans le formulaire parent et appelez la méthode de formulaire parent à l'intérieur de celui-ci.

ChildForm frm = new ChildForm(); 
frm.FormClosed += new FormClosedEventHandler(frm_FormClosed); 

void frm_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     //Call your method here. 
    } 
+0

Génial ... Merci –

14

Il existe plusieurs façons d'y parvenir, mais voici un moyen simple. Dans votre formulaire principal, lorsque vous créez et de montrer une forme d'enfant, le faire comme ceci:

ChildForm child = new ChildForm(); 
child.Show(this); // this calls the override that takes Owner parameter 

Ensuite, lorsque vous avez besoin d'appeler une méthode sous la forme principale de la forme de l'enfant, utiliser le code comme ceci (suppose votre principale forme est de type MainForm):

MainForm parent = (MainForm)this.Owner; 
parent.CallCustomMethod(); 

une façon plus complexe serait d'utiliser une forme d'injection de dépendance, où vous passeriez dans une référence à la forme mère (ou plus correctement, à son interface) dans le constructeur de la forme enfant. Mais la méthode ci-dessus est simple et probablement assez efficace pour vos objectifs (et en fait est une forme d'injection de dépendance elle-même, en quelque sorte).

+1

Vous pouvez également utiliser 'ShowDialog (this);' - le code fonctionnera de la même façon. – MusiGenesis

Questions connexes