我有一个简单的问题:我在win-forms / c#中有一个主窗体。它有一个绑定到数据库的列表框。
当我点击一个按钮时,会创建一个新表单。
当我单击子表单上的某个按钮时,我想调用主表单中存在的方法,该方法更新列表框,或者当子表单关闭时调用该函数。
这可能吗?
答案 0 :(得分:15)
有很多方法可以实现这一目标,但这是一种简单的方法。在您的主窗体中,当您创建并显示子窗体时,请执行以下操作:
ChildForm child = new ChildForm();
child.Show(this); // this calls the override that takes Owner parameter
然后,当您需要从子表单中调用主表单中的方法时,请使用这样的代码(假设您的主表单是MainForm
类型):
MainForm parent = (MainForm)this.Owner;
parent.CallCustomMethod();
更复杂的方法是使用一种依赖注入形式,您可以在子窗体的构造函数中传递对父窗体(或更恰当地,它的接口)的引用。但上面的方法很简单,并且可能足以满足您的目的(实际上 是一种依赖注入本身的形式)。
答案 1 :(得分:6)
场景1:点击子窗体中的按钮,在父窗体中调用方法。
在子表单中创建Event
。在某些按钮单击等上提升该事件。在您的父表单中订阅该事件并在其中调用父表单方法。
场景2:关闭子窗体时,在父窗体中调用方法。
在父表单中处理子表单的FormClosed
或FormClosing
事件,并在其中调用父表单方法。
ChildForm frm = new ChildForm();
frm.FormClosed += new FormClosedEventHandler(frm_FormClosed);
void frm_FormClosed(object sender, FormClosedEventArgs e)
{
//Call your method here.
}