我有一个简单的问题:我在win-forms/c#中有一个主窗体。它有一个绑定到数据库的列表框。从子窗体访问主窗体
当我点击一个按钮时,会创建一个新窗体。
当我点击子窗体上的一个按钮时,我想调用一个存在于主窗体中的方法,该方法更新列表框或者在子窗体关闭时调用该函数。
这可能吗?
我有一个简单的问题:我在win-forms/c#中有一个主窗体。它有一个绑定到数据库的列表框。从子窗体访问主窗体
当我点击一个按钮时,会创建一个新窗体。
当我点击子窗体上的一个按钮时,我想调用一个存在于主窗体中的方法,该方法更新列表框或者在子窗体关闭时调用该函数。
这可能吗?
场景1:在子窗体中单击按钮时调用父窗体中的方法。
在子窗体中创建一个Event
。在某些按钮点击等事件上引发该事件。在您的父窗体中订阅该事件并在其中调用父窗体的方法。
场景2:子窗体关闭时调用父窗体中的方法。
处理Parent窗体中Child Form的FormClosed
或FormClosing
事件,并在其中调用父窗体的方法。
ChildForm frm = new ChildForm();
frm.FormClosed += new FormClosedEventHandler(frm_FormClosed);
void frm_FormClosed(object sender, FormClosedEventArgs e)
{
//Call your method here.
}
太棒了......谢谢 – 2015-09-03 16:07:10
有很多方法可以做到这一点,但这里有一个简单的方法。在主窗体,当你创建并显示一个子窗体,像这样做:
ChildForm child = new ChildForm();
child.Show(this); // this calls the override that takes Owner parameter
然后,当你需要调用一个方法从子窗体的主要形式,使用这样的代码(假设你的主要形式是MainForm
型):
MainForm parent = (MainForm)this.Owner;
parent.CallCustomMethod();
一个更复杂的方法是使用依赖注入的一种形式,你会在父窗体的引用传递(或者更确切地说,它的接口)在子窗体的构造函数中。但上面的方式很简单,可能对你的目的有效(它实际上是是依赖注入本身的一种形式,有点)。
你也可以使用ShowDialog(this);' - 代码的工作方式是一样的。 – MusiGenesis 2011-03-26 18:16:02
你是否试图实现一个包含'Save'和'apply'按钮的对话框? – manji 2011-03-26 17:54:16