从儿童表格访问主表格

Ron*_*nIL 5 c# parent-child winforms

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

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

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

这可能吗??

Mus*_*sis 16

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

ChildForm child = new ChildForm();
child.Show(this); // this calls the override that takes Owner parameter
Run Code Online (Sandbox Code Playgroud)

然后,当您需要从子窗体中调用主窗体中的方法时,请使用这样的代码(假设您的主窗体是类型MainForm):

MainForm parent = (MainForm)this.Owner;
parent.CallCustomMethod();
Run Code Online (Sandbox Code Playgroud)

更复杂的方法是使用依赖注入的形式,您可以在子窗体的构造函数中传递对父窗体(或更恰当地,它的接口)的引用.但是上面的方法很简单,并且可能足以满足您的目的(实际上它一种依赖注入本身的形式).


May*_*ank 6

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

Event在子表单中创建一个.在某些按钮单击等上提升该事件.在您的父表单中订阅该事件并在其中调用父表单方法.

场景2:关闭子窗体时,在父窗体中调用方法.

在父表单中处理子表单FormClosedFormClosing事件,并在其中调用父表单方法.

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

void frm_FormClosed(object sender, FormClosedEventArgs e)
    {
        //Call your method here.
    }
Run Code Online (Sandbox Code Playgroud)