我有3种形式。关闭从另一种形式的MDI子窗体
- main_frm是MDI
- app_frm是孩子MDI ,显示在progress_frm形式app_frm
的进步
private void frm_progress_Closing(object sender, FormClosingEventHandler e)
{
Form currentForm = Form.ActiveForm;
Form app_frm_temp = currentForm.ActiveMdiChild;
app_frm_temp.Dispose();
}
我在期待表格app_frm会关闭并终止它正在做的任何事情。但那不会发生..只有progress_frm窗体关闭,我仍然看到app_frm运行时小时玻璃,仍然运行它的进程/线程。
我的目标是,如果用户想要中止并关闭app_frm启动的进程,他们将能够从progress_frm中终止并关闭app_frm?
在下面的反馈之后,我尝试了下面的内容,我的表单没有触及结束事件,因为我从另一个表单复制并粘贴了它,然后我继续进行progress_frm的设计部分,并对此产生了一个令人困惑的事件: (:
private void progress_frm_FormClosing(object sender, FormClosingEventArgs e)
{
Form currentForm = Form.ActiveForm;
foreach (Form frm in currentForm.MdiParent.MdiChildren)
{
if (frm.GetType() == currentForm.GetType())
{
frm.Focus();
return;
}
}
}
我得到当循环访问currentForm ..记住一个空例外“对象引用不设置到对象的实例”我的我是这不是MDI配置的一部分progress_frm ...我想引用和关闭/终止其父为main_frm的子表单app_frm ...我知道currentForm是main_frm,但不知道为什么它不会找到子表单,所以我可以参考它??我试着改变循环到“currentForm.MdiChildren”,仍然得到了相同的空引用异常......
我想我明白MDI的概念,但现在我得到了如何能够正确地引用它们混淆
如果两个frm_progress和app_frm是一回事儿Mdi的父母然后我不这么认为有任何需要使用Form.ActiveForm;而不是在foreach循环,使用this.MdiParent.MdiChildren ...而且,为了关闭窗体替换'frm.Focus()'与'frm.Close()' – Waqas