2

在我的应用程序中,当我将窗体作为主 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();
}
4

2 回答 2

5

这是正常的,完全是设计使然。MDI 子窗口不是顶级窗口,而是一种特殊类型的子窗口,旨在承载在 MDI 父窗口中。

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

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

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

于 2012-07-23T10:40:18.583 回答
2

我终于得到了答案,如果我把表格做成子表格

c.MdiParent =this;

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

于 2012-09-06T09:10:35.500 回答