MDI儿童在关闭一次后不显示

时间:2014-11-13 16:03:40

标签: c# winforms visual-studio-2012

嗨,每个程序员都在这里: 我是编程方面的新手 我有两种形式

  1. Main_ form巫婆是一名mdicontainer。
  2. 注册表格是Main_form
  3. 中的mdichild

    我制作此代码只能同时打开一个注册表单。 问题是,当我关闭注册表单并单击NewRegToolStripMenuItem_Click再次打开它时,它无效。如何修复它,以便每次关闭表单然后单击它再次打开按钮? 非常感谢。

    Customer_Regisration_Form cf;
    
    
    private void NewRegToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (cf == null | IsDisposed)
            { cf = new Customer_Regisration_Form();
                cf.MdiParent = this;
                cf.Show();
            }
        }
    

3 个答案:

答案 0 :(得分:1)

如果您一次只打开一个实例,也许您应该考虑使用Form.ShowDialog。这将显示您的RegistrationForm作为模态对话框。

var registrationForm = new RegistrationForm();
registrationForm.ShowDialog();

这将要求用户在他/她可以做任何其他事情之前退出此对话框。如果您要引用RegistrationForm的同一个打开实例而不使其成为正式对话框,请使用MainForm上的Form.MdiChildren属性,看看它是否包含目标实例形式。

var registrationForm = mainForm.MdiChildren.OfType<RegistrationForm>().SingleOrDefault();
if (registrationForm == null) {
    registrationForm = new RegistrationForm();
    registrationForm.MdiParent = this;
    registrationForm.Show();
} else if (registrationForm.WindowState == FormWindowState.Minimized) 
    registrationForm.WindowState = FormWindowState.Normal;
else
    registrationForm.Activate();

以上内容应该确认RegistrationForm的孩子中是否已经开启MainForm,并且如果可以找到则坚持下去。然后它恢复其正常状态,如果它先前已被最小化并且应用程序给它焦点调用Form.Activate方法。

否则,它只是创建一个新实例并显示它。

答案 1 :(得分:0)

我相信你有几个问题:

  1. 您正在查看IsDisposed,这是MDI的一个属性,并且与此if语句无关。
  2. 如果注册表格为空或已处理,则仅显示注册表格。
  3. 尝试更新您的代码,如下所示:

    Customer_Regisration_Form cf;
    
    private void NewRegToolStripMenuItem_Click(object sender, EventArgs e)
    {
        if (cf == null || cr.IsDisposed)
        { cf = new Customer_Regisration_Form();
            cf.MdiParent = this;
        }
    
        cf.Show();
    }
    

    请注意,我已将您的|更改为||,这是short circuiting logical or,一旦失败,将不会继续评估语句中的其他条件。这将阻止if语句的第二个条件上的空引用异常。我基本上再也不会使用|了。

答案 2 :(得分:0)

确保您将表单作为全局变量。

private frmForm frm = new frmForm();

然后

private void btnSomeButton_Click(object sender, EventArgs e)
{
    if (frm.Visible == true)
    {
        frm.MdiParent = this;
        frm.Show();
        return;
    }

    if (frm.IsDisposed)
    {
        frm = new frmForm ();
        frm.MdiParent = this;
        frm.Show();
        return;
    }

    frm.MdiParent = this;
    frm.Show();
}