MDI子项关闭一次后不显示

本文关键字:一次 显示 MDI | 更新日期: 2023-09-27 18:30:13

各位程序员好:我是编程方面的新手我有两张表格

  1. 主窗体开关是一个mdicontainer
  2. 注册表是Main_form中的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();
        }
    }

MDI子项关闭一次后不显示

如果一次只想打开一个实例,也许应该考虑使用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();

以上将检查MainForm的孩子中是否有已经打开的RegistrationForm,如果可以找到,请坚持。然后,如果它以前被最小化,它将恢复正常状态,并且应用程序通过调用Form.Activate方法为它提供焦点。

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

我相信您有几个问题:

  1. 您正在检查IsDisposed,它是MDI的一个属性,与if语句无关
  2. 只有当登记表为空或已处理时,您才会显示该登记表

尝试更新你的代码如下,看看这是否有帮助:

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();
}

请注意,我将您的|更改为||,这是一个短路逻辑,一旦失败,它将不会继续评估语句中的其他条件。这将防止if语句的第二个条件出现null引用异常。我基本上再也不用|了。

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

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();
}