重新打开儿童表格

时间:2012-01-03 14:31:21

标签: c# winforms

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

  

的MainForm
  ChildFormA - 独特的
  ChildFormB - 具有此类型的多种形式

我用:

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

但是当我关闭它时:

form1.Close();

我无法重新打开它。 我已经阅读了一些提示,我可以隐藏此表单或关闭它。但是X按钮仍然关闭了表单。 如何重新打开或如何防止X按钮关闭并简单隐藏它?

5 个答案:

答案 0 :(得分:9)

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

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


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

请注意,如果您没有为此添加更多逻辑,那么您的表单将不会被处理掉。

否则,您只需创建一个新实例即可。

答案 1 :(得分:2)

创建ChildFormA

的新实例

答案 2 :(得分:2)

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

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类字段,这样您就不会丢失参考号。它。

答案 3 :(得分:0)

描述here描述了阻止表单关闭的

。我也建议隐藏,但也许它可以将可见设置为假......

答案 4 :(得分:0)

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

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

看第4种方法

然后,您将使用静态实例访问它,而不是创建一个新实例。 在儿童表格

上你仍然需要Matthias Koch解决方案
void FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;
    Hide();
}

如果您需要有关Singleton模式的进一步帮助,请说明。