我有3种形式。
在progress_frm表单中,我有一个名为“cancel”的按钮,用于关闭progress_frm表单。然后在关闭progress_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时,我得到一个空异常“对象引用未设置为对象的实例”。记住我的我是progress_frm,它不是MDI配置的一部分...我试图引用和关闭/终止子窗体app_frm,其父级是main_frm ...我知道currentForm是main_frm,但不知道为什么它不会找到子窗体,所以我可以引用它?我尝试将循环更改为“currentForm.MdiChildren”并仍然获得相同的空引用异常...
我认为我理解MDI概念,但现在我对如何正确引用它们感到困惑
答案 0 :(得分:0)
您确定app_frm_temp
对象是否引用了app_frm
表单的已打开实例?如果它是你的app_frm的FormClosing
事件,你必须正确地向你的进程/线程发送结束通知,这里给出了一个很好的例子,用于在关闭表单之前停止后台线程/进程:{{3} }
但在此之前,只是为了确保您正在引用正确的Form实例,这就是如何循环遍历所有已打开的MDI子项并获取对您感兴趣的子项的引用:
foreach (Form frm in this.MdiParent.MdiChildren)
{
if (frm.GetType() == app_frm.GetType())
{
frm.Focus();
return;
}
}