C# 从子窗体访问主窗体

C# 从子窗体访问主窗体,c#,winforms,parent-child,C#,Winforms,Parent Child,我有一个简单的问题:我在win forms/c#中有一个主窗体。它有一个绑定到数据库的列表框 单击按钮时,将创建一个新表单 当我单击子窗体上的按钮时,我想调用主窗体中存在的更新列表框的方法,或者在子窗体关闭时调用该函数 这可能吗???场景1:单击子窗体中的按钮,调用父窗体中的方法 在子窗体中创建一个事件。在某个按钮单击等时引发该事件。在父窗体中订阅该事件,并在该窗体中调用父窗体方法 ChildForm frm = new ChildForm(); frm.FormClosed += new Fo

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

单击按钮时,将创建一个新表单

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


这可能吗???

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

在子窗体中创建一个
事件
。在某个按钮单击等时引发该事件。在父窗体中订阅该事件,并在该窗体中调用父窗体方法

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

void frm_FormClosed(object sender, FormClosedEventArgs e)
    {
        //Call your method here.
    }
场景2:在子窗体关闭时调用父窗体中的方法

在父窗体中处理子窗体的
FormClosed
FormClosed
事件,并在其中调用父窗体方法

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

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

有很多方法可以实现这一点,但这里有一个简单的方法。在主窗体中,当您创建并显示子窗体时,请执行以下操作:

ChildForm child = new ChildForm();
child.Show(this); // this calls the override that takes Owner parameter
然后,当需要从子窗体调用主窗体中的方法时,请使用如下代码(假定主窗体的类型为
MainForm
):


更复杂的方法是使用依赖项注入的形式,在子表单的构造函数中传递对父表单(或者更准确地说是对其接口)的引用。但是上述方法很简单,并且可能对您的目的足够有效(实际上它本身就是一种依赖注入形式)。

您是否试图实现一个包含
Save
apply
按钮的对话框-无论哪种方式,代码都将以相同的方式工作;但是我在ChildForm.MainForm parent=(MainForm)this.ParentForm中得到了这个.Owner的空值;parent.CallCustomMethod();