2011-08-22 88 views
0

我有3种形式。关闭从另一种形式的MDI子窗体

  • main_frm是MDI
  • app_frm是孩子MDI
  • ,显示在progress_frm形式app_frm

的进步

  • progress_frm只是一种形式我有一个名为 “取消” 按钮关闭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 ..记住一个空例外“对象引用不设置到对象的实例”我的我是这不是MDI配置的一部分progress_frm ...我想引用和关闭/终止其父为main_frm的子表单app_frm ...我知道currentForm是main_frm,但不知道为什么它不会找到子表单,所以我可以参考它??我试着改变循环到“currentForm.MdiChildren”,仍然得到了相同的空引用异常......

    我想我明白MDI的概念,但现在我得到了如何能够正确地引用它们混淆

  • +0

    如果两个frm_progress和app_frm是一回事儿Mdi的父母然后我不这么认为有任何需要使用Form.ActiveForm;而不是在foreach循环,使用this.MdiParent.MdiChildren ...而且,为了关闭窗体替换'frm.Focus()'与'frm.Close()' – Waqas

    回答

    0

    你确定你的app_frm_temp对象是指app_frm表单的打开实例?如果是则在FormClosing事件您app_frm你必须关闭通知正确地发送到你的进程/线程的,一个很好的例子在这里给出了封闭形式之前停止后台线程/进程:How to stop BackgroundWorker on Form's Closing event?

    但在此之前只是为了确保你指的正确形式的情况下,这是你怎么能遍历所有打开MDI孩子的,并得到参考一个你感兴趣的是:

    foreach (Form frm in this.MdiParent.MdiChildren) 
        { 
          if (frm.GetType() == app_frm.GetType()) 
          { 
           frm.Focus(); 
           return; 
          } 
        } 
    
    +0

    thx,我更新了我的问题...我试过你的建议和仍然没有得到任何地方..我在结束事件中参考progress_frm作为frm_progress,对不起,我纠正了...... – thanosazlin