的WinForms;检测形式从另一种形式关闭

时间:2017-05-26 14:21:34

标签: c# forms winforms

是否可以检测从其他表单关闭的表单。 例如。 如果我有一个打开subForm的mainForm,我可以在mainForm中检测到subForm已关闭并执行代码吗?

我知道我可以在subForm中创建一个事件处理程序,但这并不是我之后的事情,因为我在subForm关闭后要做的事情是在mainForm中(对mainForm的更改) )。

3 个答案:

答案 0 :(得分:8)

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");
}

答案 1 :(得分:1)

看看public FormClosedEvent。由于修饰符是公共的,因此您可以执行类似以下示例的操作:

SubForm subForm = new SubForm();
subForm.FormClosed += delegate
{
    MessageBox.Show("subForm has closed");
};
subForm.ShowDialog();

上面的示例创建了一个新的表单(类型为SubForm),添加了一个新的事件处理程序来显示一个消息框,告诉用户表单已关闭,最后使用ShowDialog()方法阻止用户访问主表单,直到子表单关闭。

答案 2 :(得分:0)

通常的情况是"模态对话" (如Message Box及其家族)。 每个表单都可以作为模态对话框打开,使用ShowDialog()而不是Show()。

否则事件方式是唯一的方式。