2011-08-22 89 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

    相關問題