重新打开子窗体
本文关键字:窗体 新打开 | 更新日期: 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模式的进一步帮助,请说出来。