我有一个主表单和两种子表单
的MainForm
ChildFormA - 独特的
ChildFormB - 具有此类型的多种形式
我用:
创建ChildFormAChildFormA form1 = new ChildFormA();
form1.MdiParent = this;
form1.Show();
但是当我关闭它时:
form1.Close();
我无法重新打开它。 我已经阅读了一些提示,我可以隐藏此表单或关闭它。但是X按钮仍然关闭了表单。 如何重新打开或如何防止X按钮关闭并简单隐藏它?
答案 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)
。我也建议隐藏,但也许它可以将可见设置为假......
答案 4 :(得分:0)
您可以在此表单中使用Singleton模式。
http://csharpindepth.com/Articles/General/Singleton.aspx
看第4种方法
然后,您将使用静态实例访问它,而不是创建一个新实例。 在儿童表格
上你仍然需要Matthias Koch解决方案void FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
Hide();
}
如果您需要有关Singleton模式的进一步帮助,请说明。