2012-04-26 70 views
0

我用這種方法創建的MainForm新MdiChild撥打MdiChild:如何從形式的MdiParent

AdminLogInForm adminForm; 
private void LogInAsAdminMenuItem_Click(object sender, EventArgs e) 
    { 
     if (adminForm == null) 
     { 
      adminForm = new AdminLogInForm(); 
      adminForm.MdiParent = this; 
      adminForm.Show(); 
      adminForm.Dock = DockStyle.Fill; 
      adminForm.BringToFront(); 
      LogInAsAdminMenuItem.Enabled = false;    
     } 
     else 
     { 
      adminForm.Activate(); 
      adminForm.BringToFront(); 
     } 
    } 

爲什麼當我結束我的孩子,使用CHLD形式「this.close()」使用我的方法不能再打開它了?

那裏我打電話close();

 private void cancelLogInButton_Click(object sender, EventArgs e) 
    { 
     this.MdiParent.Activate();    
     if(this.MdiParent!=null) 
     ((MainForm)this.MdiParent).LogInAsAdminMenuItem.Enabled = true; 
     this.Close(); 
    } 

順便說一句,在我開始討論這個問題之前,我問過這個問題。畢竟陳述。

+0

當我回答你的問題時,你改變了這個問題。現在請顯示您在哪裏調用Close()函數以及您打算打開它的位置。 – Marshal 2012-04-26 05:07:19

+0

thnx,我編輯,plalad函數調用關閉()它是在子表單 – Bublik 2012-04-26 05:12:59

回答

0

通過關閉你都賺不到adminForm實例爲null(這是你的,如果當你嘗試下一次打開它的條件將檢查。)

在窗體的diposal使adminForm = null然後形式你的條件將在下次工作。

private void LogInAsAdminMenuItem_Click(object sender, EventArgs e) 
    { 
     if (adminForm == null) 
     { 
      adminForm = new AdminLogInForm(this); 
      adminForm.Disposed += new EventHandler(adminForm_Disposed); //Add Disposed EventHandler 
      adminForm.MdiParent = this; 
      adminForm.Show(); 
      adminForm.Dock = DockStyle.Fill; 
      adminForm.BringToFront(); 
      LogInAsAdminMenuItem.Enabled = false;    
     } 
     else 
     { 
      adminForm.Activate(); 
      adminForm.BringToFront(); 
     } 
    } 

    void adminForm_Disposed(object sender, EventArgs e) 
    { 
     adminForm = null; 
    } 
+0

那麼加入|| adminForm.IsDisposed後adminForm == null ???? – kashif 2012-05-11 22:40:04

+0

@ kashif:他們中的任何一個都可以使用,因爲兩者在當前環境下都是相同的。 – Marshal 2012-05-12 05:40:34

0

所描述的元帥,一個形式的結束使得它佈置你應該添加一個條件處置以及類似這樣的

AdminLogInForm adminForm; 

private void LogInAsAdminMenuItem_Click(object sender, EventArgs e) 
    { 
     if (adminForm == null || adminForm.IsDisposed) 
     { 
      adminForm = new AdminLogInForm(); 
      adminForm.MdiParent = this; 
      adminForm.Show(); 
      adminForm.Dock = DockStyle.Fill; 
      adminForm.BringToFront(); 
      LogInAsAdminMenuItem.Enabled = false;    
     } 
     else 
     { 
      adminForm.Activate(); 
      adminForm.BringToFront(); 
     } 
    } 

或者你也可以創建使用形式作爲功能mdi like this