【问题标题】:Why aren't my MDI child forms showing a shadow?为什么我的 MDI 子窗体没有显示阴影?
【发布时间】:2012-07-23 10:20:10
【问题描述】:

在我的应用程序中,当我将表单作为主 MDI 父表单的子表单时,子表单停止在表单后面显示 Windows 7 默认阴影效果。如何让子窗体阴影显示?

Form obj = Application.OpenForms["My_form"];
if (obj != null)
{
    obj.Focus();
}
else
{
    My_form c = new My_form();
    c.MdiParent = this;
    c.Show();
}

【问题讨论】:

  • 如果这将是操作系统问题,而不是代码问题...
  • 我认为这是设计使然。 MDI 子窗口不是顶级窗口(尽管它们尽力看起来像一个),并且合成管理器仅在顶级窗口周围呈现阴影。

标签: windows winforms mdi aero mdichild


【解决方案1】:

这是正常的,完全是设计使然。 MDI child windows are not top-level windows, but rather a special type of child window that is designed to be hosted in an MDI parent window.

在 Windows Vista 和 7 中负责 Aero 效果的桌面窗口管理器 (DWM) 仅向顶级窗口添加投影和玻璃透明度。您的 MDI 子窗口不符合此处理条件。事实上,阴影并不是他们唯一缺少的东西——它们看起来像是使用 Aero Basic 主题绘制的,这在使用 Aero 主题的机器上非常不和谐。

不幸的是,除了完全放弃 MDI 之外,没有其他解决方法。无论如何,现在多文档界面已被弃用。这样的界面对人们的使用提供了比最初预期的更加困难的界面,而且它们几乎完全被废弃了,尤其是微软自己的软件。您会注意到,Microsoft Office 使用多个顶级窗口,而不是使用 MDI。您或许应该考虑用自己的软件做同样的事情。

另一个流行的 MDI 替代方案是 选项卡式 界面,通常由 Web 浏览器使用。在这里,您有一个单一的顶级窗口,并且所有子窗口都显示为该主窗口顶部的“选项卡”。与独立的 MDI 子窗口相比,用户可以更轻松、更直观地在子窗口之间切换为选项卡。

【讨论】:

    【解决方案2】:

    我终于得到了答案,如果我把一个表格做成像这样的子表格

    c.MdiParent =this;
    

    它使表单的外观变得平坦,如果您想将表单显示为默认窗口,如表单 不要将表单的 mdi 设为父级!

    【讨论】:

      猜你喜欢
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 2014-10-28
      • 2020-09-04
      相关资源
      最近更新 更多