【问题标题】:How to open and close MDI child forms if they do not have a ControlBox如果 MDI 子窗体没有 ControlBox,如何打开和关闭它们
【发布时间】:2026-01-26 16:25:02
【问题描述】:

我的 MDI 应用程序一次显示一个最大化的子窗体,并且子窗体没有 ControlBox。切换子表单是通过父项中的 MenuStrip 中的项目完成的。在使用 .show 来查看另一个子窗体之前,我真的需要弄清楚显示的是哪个子窗体并 .hide 吗?

另外,如果我将所有子窗体的 WindowState 属性设置为最大化并忽略 Size 属性,那么当我第一次在子窗体上使用 .show 时,它不会在父窗体中最大化。一旦我对孩子使用 .hide ,下一个 .show 会产生一个最大化的孩子表单。有没有办法让子窗体在第一次显示时最大化?

【问题讨论】:

  • 在这种窗口模型中使用 MDI 毫无意义。它只是碍事。

标签: .net mdi


【解决方案1】:
  1. 您通常不需要在显示下一个 mdi 子级之前隐藏一个 mdi 子级,但时间可能会混淆,在这种情况下,错误的表单可能会出现在最前面。这可能发生在启动或加载或关闭文件时。

  2. 可能在父表单完成加载之前加载子表单,此时父表单尚未最大化。子窗体可能在父窗体中正确最大化,但随后父窗体变得更大。您可以通过在父级的 Shown 事件中将子窗体设置为最大化(或调整其大小?)来解决此问题。您也可以在父级的 ResizeEnd 事件中执行此操作。

正如 Hans 所说,假设您有时间进行更改,现在使用 Tab 代替 MDI 在社会上更容易接受。

【讨论】:

  • 如果您只想显示“一次最大化的子窗体”,我什至不建议使用标签。如果显示其他选项卡您无法切换到,那只会令人困惑,如果只显示一个选项卡,那只会浪费空间。
  • 好点。但是如果只打开一个选项卡,你可以去掉顶部的选项卡,就像 Firefox 中的选项一样。
  • 感谢大家的cmets。对于特定的软件,MDI 已成定局。
最近更新 更多