【发布时间】:2011-08-22 09:54:22
【问题描述】:
我有 3 个表格。
- main_frm 是 MDI
- app_frm 是子 MDI
- progress_frm 只是一个显示 app_frm 进度的表单
在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 配置的一部分...我正在尝试引用和关闭/终止父为 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()'
标签: c#