C# 如何从MdiChild父窗体调用MdiChild

C# 如何从MdiChild父窗体调用MdiChild,c#,mdichild,mdiparent,C#,Mdichild,Mdiparent,我使用以下方法从MainForm创建新的MdiChild: AdminLogInForm adminForm; private void LogInAsAdminMenuItem_Click(object sender, EventArgs e) { if (adminForm == null) { adminForm = new AdminLogInForm(); adminForm.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()


顺便说一句,在我用塑料做这个之前,我问过你要做什么;在所有语句之后。

通过将您未创建的表单
adminForm
实例关闭为null(这是您下次尝试打开它时if条件将检查的内容。)

在表单的diposal上,使
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;
    }

正如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

当我回答你的问题时,你改变了问题。现在请显示您在哪里调用Close()函数,以及您打算在哪里打开它。thnx,我编辑过,plased函数调用Close(),它在子窗体上
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();
        }
    }