2011-01-12 198 views
1

我有一个窗体窗体应用程序(一个游戏),它有一个stats按钮。 当用户按下统计按钮时,会弹出一个新窗口,他可以查看他的统计信息。一个窗口关闭时关闭几个窗口

问题是:用户单击统计按钮并弹出统计窗口。当他按下选项按钮来更改游戏选项时,我有一个关闭游戏窗体但不显示统计窗体的代码。所以如果他忘记关闭统计表格,它仍然是开放的。

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

回答

3

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

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

-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(); 
} 
+0

模态对话框对用户界面设置了重要限制。如果统计数据是实时游戏中的实时数据,则弹出统计数据作为模态对话框必须强制游戏暂停(在多人游戏中不可能),否则玩家可能会失去点数或游戏而无法控制主表单。主要应用于执行已停止并且用户必须知道原因的情况下,或者在没有用户对问题的响应的情况下正常执行无法继续的情况。统计窗口既不是这些。 – KeithS 2011-01-13 17:56:17

+0

据我所知,游戏中的所有选项界面都可以用作对话框或全窗口外观,而这只是一个建议,如果你看看代码,你可以注意到`Show()`是用来做什么的 – 2011-01-13 18:47:37