如何从MDIParent表单调用MdiChild

时间:2012-04-26 04:54:25

标签: c# mdichild mdiparent

我使用此方法从MainForm创建一个新的MdiChild:

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();
    }
顺便说一下,在我开始讨论这个问题之前我做的工作。关闭();在所有陈述之后。

2 个答案:

答案 0 :(得分:0)

通过关闭表单,您不会将adminForm实例设为null(这是您下次尝试打开时检查的if条件。)

在您的表单上,adminForm = null然后您的if条件将在下次使用。

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;
    }

答案 1 :(得分:0)

正如Marshal所描述的那样,关闭一个表格使其处理掉你应该添加一个处理条件,就像这样

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