2011-03-26 299 views
5

我有一个简单的问题:我在win-forms/c#中有一个主窗体。它有一个绑定到数据库的列表框。从子窗体访问主窗体

当我点击一个按钮时,会创建一个新窗体。

当我点击子窗体上的一个按钮时,我想调用一个存在于主窗体中的方法,该方法更新列表框或者在子窗体关闭时调用该函数。

这可能吗?

+0

你是否试图实现一个包含'Save'和'apply'按钮的对话框? – manji 2011-03-26 17:54:16

回答

6

场景1:在子窗体中单击按钮时调用父窗体中的方法。

在子窗体中创建一个Event。在某些按钮点击等事件上引发该事件。在您的父窗体中订阅该事件并在其中调用父窗体的方法。

场景2:子窗体关闭时调用父窗体中的方法。

处理Parent窗体中Child Form的FormClosedFormClosing事件,并在其中调用父窗体的方法。

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

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

太棒了......谢谢 – 2015-09-03 16:07:10

14

有很多方法可以做到这一点,但这里有一个简单的方法。在主窗体,当你创建并显示一个子窗体,像这样做:

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

然后,当你需要调用一个方法从子窗体的主要形式,使用这样的代码(假设你的主要形式是MainForm型):

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

一个更复杂的方法是使用依赖注入的一种形式,你会在父窗体的引用传递(或者更确切地说,它的接口)在子窗体的构造函数中。但上面的方式很简单,可能对你的目的有效(它实际上是依赖注入本身的一种形式,有点)。

+1

你也可以使用ShowDialog(this);' - 代码的工作方式是一样的。 – MusiGenesis 2011-03-26 18:16:02