在一个窗口关闭时关闭几个窗口

时间:2011-01-12 22:53:38

标签: c# .net winforms

我有一个带有统计按钮的窗体应用程序(游戏)。 当用户按下统计按钮时,会弹出一个新窗口,在那里他可以看到他的统计数据。

问题是:用户点击统计按钮,弹出统计窗口。当他按下选项按钮来改变游戏的选项时,我有一个代码可以关闭游戏形式而不是统计形式。因此,如果他忘记关闭统计表格,它仍然是开放的。

如何从游戏表单中关闭统计信息表单?

2 个答案:

答案 0 :(得分:3)

使用Form.Owner属性指定表单的所有者。在您的情况下,这可能是主窗口,或者是由用户触发生成新窗口的GUI元素的窗口。如果所有者关闭,新表格将关闭。这种关系是级联的,所以如果你将表格B的所有者设置为表格A,然后将表格C的所有者设为B,如果你关闭A或B,C将关闭(如果你关闭A,B也会关闭)。如果B产生C,但C与B独立有用,则将C的所有者设置为A(您可以通过表单B的所有者属性执行此操作),当B关闭时C将保持打开状态,但在A关闭时仍将关闭。

最后,如果使用Application.Run(Form mainForm)打开“main”程序窗体,当指定为参数的窗口关闭时,应用程序将完全退出。因此,如果可执行文件产生A,A产生B,B产生C,当A关闭时,应用程序关闭,所有窗口都关闭,无论所有权如何。

答案 1 :(得分:-1)

为什么不使用dialog将其打开为ShowDialog(),以便强制他关闭它,然后再返回选项表单?
如果游戏的形式是主要形式,那么它必须自动关闭其他剩余的形式,否则你必须在游戏形式的某个地方声明satasForm并设法在用户关闭你的游戏形式时关闭它

StatsForm  sFrm = new StatsForm  ();
public gameFrm()
{
InitializeComponent();
}

private void btnShowStateForm_Click(object sender, EventArgs e)
{
sFrm.Show(); //or call
//    sFrm.ShowDialog();
}

private void gameFrm_FormClosing(object sender, FormClosingEventArgs e)
{
sFrm.Close();
}