重新打开子窗体

本文关键字:窗体 新打开 | 更新日期: 2023-09-27 18:19:15

我有一个主表单和两个子表单

MainForm
ChildFormA - unique
ChildFormB -有多个这种类型的表单

我创建了ChildFormA:

ChildFormA form1 = new ChildFormA();
form1.MdiParent = this;
form1.Show();

但是当我用:

form1.Close();

我不能重新打开它。我已经读了一些提示,我可以隐藏这个表单或关闭它。但是X按钮仍然关闭表单。如何重新打开或如何防止X按钮关闭和简单隐藏它?

重新打开子窗体

如果您希望子窗体保持其状态,则必须订阅FormClosing事件并将事件参数的Cancel属性设置为true

public ChildForm()
{
    ...
    FormClosing += new FormClosingEventHandler(ChildForm_FormClosing);
}

void ChildForm_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;
    Hide();
}

请记住,如果你不添加更多的逻辑,你的表单将不会被处理。

创建一个新的ChildFormA实例

您应该只创建一次子表单。

ChildFormA form1 = new ChildFormA();
if(form1 == null)
{
 form1.MdiParent = this;
 form1.Show();
}
else
 form1.Show();

你应该使用Matthias Koch解决方案,在子窗体

void FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;
    Hide();
}

也保持ChilFormA作为一个MDI类字段,所以你不会失去Ref. to它

防止表单关闭的方法在这里描述。我也会建议隐藏,但也许它的工作设置可见为假…

您可以在此表单中使用Singleton模式。

http://csharpindepth.com/Articles/General/Singleton.aspx

看第四个方法

那么您将使用静态实例来访问它,而不是创建一个新实例。你仍然需要马提亚科赫的解决方案,对孩子形成

void FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;
    Hide();
}

如果您需要Singleton模式的进一步帮助,请说出来。