0

我使用此方法从 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();
    }

顺便说一句,在我解决这个问题之前我问过的工作。关闭();毕竟声明。

4

2 回答 2

0

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

在处理您的表格时 make 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;
    }
于 2012-04-26T05:05:29.250 回答
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 像这样

于 2012-05-11T22:33:39.267 回答