从另一个窗体关闭一个窗体?

5

我有一个小应用程序,可以在数据库发生更改时创建警报。

在弹出的警报表单中,我有几个选项。

其中一个选项会打开另一个表单(子表单),要求用户提供更多信息。

当子表单从用户那里获取到必要的信息后,我希望它能关闭以及父表单。到目前为止,我只知道如何关闭子表单,但不知道如何关闭父表单。

Parent form > Opens child form
Child gathers information > User clicks ok in child > child closes, parent closes

^这就是我想要的

我只是没有足够的头脑去思考如何跨表单通信以完成关闭父表单。

任何帮助都将不胜感激,实际上,它会非常感激。如果我能学会如何使我的表单彼此通信,我真的可以做很多事情(以一种好的方式8D)。

2个回答

6
在父表单中,您可以这样做:
ChildForm f = new ChildForm();
f.FormClosed += (o,e) => this.Close();
f.Show();

1
这样做不允许用户取消他们在子窗体中正在进行的任何操作。 - Jamie Ide
好的,Jamie,谢谢你的建议,我会看看你的解决方案。 - sooprise
@Soo - 我不小心删掉了我的原始评论。尝试使用 f.FormClosed += delegate { this.Close(); }; - Justin Niessner
谢谢Justin,我确认你的代码可行,但我选择了Jamie的解决方案,因为它会检查用户是否执行了关闭表单的操作。祝你周末愉快! - sooprise

1

在父表单中尝试这个:

using (var childForm = new ChildForm())
{
    if (childForm.ShowDialog() == DialogResult.OK)
    {
        Close();
    }
}

你的子窗体应该通过点击按钮(OK或Cancel)并/或在设计器中设置AcceptButton和CancelButton属性来返回DialogResult。


如果子窗体要向父窗体返回大量信息,我更喜欢使子窗体的类定义一个静态方法,该方法创建一个子窗体,对其执行ShowDialog,将适当的信息从中复制到返回数据对象中,销毁该窗体并返回数据。在这种情况下,子窗体的构造函数可以是Protected或者,如果该类不可继承,则可以是private。 - supercat
我可以将业务对象传递到子窗体中并让它对该对象进行更改,或者更常见的是,在子窗体上公开数据属性。 - Jamie Ide

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接