【发布时间】:2017-10-27 11:43:03
【问题描述】:
是否可以检测到从另一个表单关闭的表单。 例如。 如果我有一个打开 subForm 的 mainForm,我可以在 mainForm 中检测到 subForm 已关闭并执行代码吗?
我知道我可以在 subForm 中创建一个事件处理程序,但这并不是我真正想要的,因为在 subForm 关闭后我要做的是在 mainForm 中(更改为 mainForm)。
【问题讨论】:
是否可以检测到从另一个表单关闭的表单。 例如。 如果我有一个打开 subForm 的 mainForm,我可以在 mainForm 中检测到 subForm 已关闭并执行代码吗?
我知道我可以在 subForm 中创建一个事件处理程序,但这并不是我真正想要的,因为在 subForm 关闭后我要做的是在 mainForm 中(更改为 mainForm)。
【问题讨论】:
FormClosed 事件是公开的,因此您可以从主窗体创建处理程序。
//Inside main Form. Click button to open new form
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.FormClosed += F2_FormClosed;
f2.Show();
}
private void F2_FormClosed(object sender, FormClosedEventArgs e)
{
MessageBox.Show("Form was closed");
}
【讨论】:
看看public FormClosedEvent。由于修饰符是公开的,因此您可以执行以下示例:
SubForm subForm = new SubForm();
subForm.FormClosed += delegate
{
MessageBox.Show("subForm has closed");
};
subForm.ShowDialog();
上面的例子创建了一个新的表单(SubForm 类型),添加了一个新的事件处理程序来显示一个消息框,告诉用户表单已经关闭,最后使用ShowDialog() 方法来阻止用户访问主窗体,直到子窗体被关闭。
【讨论】:
通常的情况是“模态对话框”(如消息框及其系列)。 通过使用 ShowDialog() 而不是 Show(),每个表单都可以作为模态对话框打开。
否则事件方式是唯一的方式。
【讨论】: