【问题标题】:Closing Several Windows While One Window Is Closed关闭一个窗口时关闭多个窗口
【发布时间】:2011-01-12 22:53:37
【问题描述】:

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

问题是:用户单击统计按钮并弹出统计窗口。当他按下选项按钮来更改游戏选项时,我有一个代码可以关闭游戏表单而不是统计数据表单。因此,如果他忘记关闭统计表格,它仍然保持打开状态。

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

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    使用 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 关闭时,应用程序将关闭,所有窗口都将关闭,无论所有权如何。

    【讨论】:

      【解决方案2】:

      为什么不使用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();
      }
      

      【讨论】:

      • 模式对话框对 UI 有很大的限制。如果统计数据在实时游戏中是实时的,则以模式对话框的形式弹出统计数据必须强制游戏暂停(在多人游戏中不可能),否则玩家可能会失去积分或游戏而无法控制主窗体.模态应该主要用于执行已经停止并且用户必须知道原因的情况,或者如果没有用户对问题的响应,正常执行就无法继续。统计窗口不是这些。
      • 据我所知,游戏中的所有选项界面都是对话框或全窗口外观,这只是一个建议,如果你看一下代码你会发现Show() 是用了什么
      猜你喜欢
      • 1970-01-01
      • 2022-01-07
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多