【问题标题】:how to call MdiChild from MDIParent form如何从 MDIParent 表单调用 MdiChild
【发布时间】:2012-05-12 06:46:30
【问题描述】:

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

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

【问题讨论】:

  • 当我回答你的问题时,你已经改变了问题。现在请说明你在哪里调用 Close() 函数以及你打算在哪里打开它。
  • thnx,我编辑,plased 函数调用 close() 它在子窗体上

标签: c# mdichild mdiparent


【解决方案1】:

通过关闭表单,您不会使 adminForm 实例为空(这是您的 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;
    }

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      相关资源
      最近更新 更多