MDI子项关闭一次后不显示
本文关键字:一次 显示 MDI | 更新日期: 2023-09-27 18:30:13
各位程序员好:我是编程方面的新手我有两张表格
- 主窗体开关是一个mdicontainer
- 注册表是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();
}
}
如果一次只想打开一个实例,也许应该考虑使用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方法为它提供焦点。
否则,它只需创建一个新实例并显示它。
我相信您有几个问题:
- 您正在检查
IsDisposed
,它是MDI的一个属性,与if语句无关 - 只有当登记表为空或已处理时,您才会显示该登记表
尝试更新你的代码如下,看看这是否有帮助:
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();
}