首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从MDIParent表单调用MdiChild

如何从MDIParent表单调用MdiChild
EN

Stack Overflow用户
提问于 2012-04-26 12:54:25
回答 2查看 4.4K关注 0票数 0

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

代码语言:javascript
复制
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();

代码语言:javascript
复制
        private void cancelLogInButton_Click(object sender, EventArgs e)
    {
        this.MdiParent.Activate();            
        if(this.MdiParent!=null)
        ((MainForm)this.MdiParent).LogInAsAdminMenuItem.Enabled = true;
        this.Close();
    }

顺便说一句,为了做我之前要求的工作,我必须在所有语句之后加上this.Close();

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-26 13:05:29

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

在表单的基础上,设置adminForm = null,然后您的if条件将在下一次工作。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2012-05-12 06:33:39

正如Marshal所描述的那样,关闭窗体会使其被释放,您还应该添加一个用于释放的条件,如下所示

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10327441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档