【发布时间】:2011-01-12 22:53:37
【问题描述】:
我有一个带有统计按钮的窗体应用程序(游戏)。 当用户按下统计按钮时,会弹出一个新窗口,他可以在其中查看他的统计信息。
问题是:用户单击统计按钮并弹出统计窗口。当他按下选项按钮来更改游戏选项时,我有一个代码可以关闭游戏表单而不是统计数据表单。因此,如果他忘记关闭统计表格,它仍然保持打开状态。
如何从游戏表格中关闭统计表格?
【问题讨论】:
我有一个带有统计按钮的窗体应用程序(游戏)。 当用户按下统计按钮时,会弹出一个新窗口,他可以在其中查看他的统计信息。
问题是:用户单击统计按钮并弹出统计窗口。当他按下选项按钮来更改游戏选项时,我有一个代码可以关闭游戏表单而不是统计数据表单。因此,如果他忘记关闭统计表格,它仍然保持打开状态。
如何从游戏表格中关闭统计表格?
【问题讨论】:
使用 Form.Owner 属性指定表单的所有者。在您的情况下,这可以是主窗口,也可以是具有由用户触发以生成新窗口的 GUI 元素的任何窗口。如果其所有者已关闭,则新表单将关闭。这种关系是级联的,所以如果你将表单B的所有者设置为表单A,那么表单C的所有者为B,如果你关闭A OR B,C将关闭(如果你关闭A,B也会关闭)。如果 B 生成 C,但 C 独立于 B 有用,则将 C 的所有者设置为 A(您可以通过表单 B 的 Owner 属性这样做),当 B 关闭时 C 将保持打开状态,但在 A 关闭时仍将关闭。
最后,如果你使用Application.Run(Form mainForm)打开“主”程序窗体,当指定为参数的窗口关闭时,应用程序将完全退出。因此,如果可执行文件生成 A,A 生成 B,B 生成 C,则当 A 关闭时,应用程序将关闭,所有窗口都将关闭,无论所有权如何。
【讨论】:
为什么不使用ShowDialog() 以dialog 打开它,然后强迫他在返回选项表单之前将其关闭?
如果游戏的表单是主表单,那么它必须自动关闭其他剩余表单,否则您必须在游戏表单中的某处声明 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();
}
【讨论】:
Show() 是用了什么