是否可以检测从其他表单关闭的表单。 例如。 如果我有一个打开subForm的mainForm,我可以在mainForm中检测到subForm已关闭并执行代码吗?
我知道我可以在subForm中创建一个事件处理程序,但这并不是我之后的事情,因为我在subForm关闭后要做的事情是在mainForm中(对mainForm的更改) )。
答案 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()。
否则事件方式是唯一的方式。