2012-04-26 33 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