为什么我的MDI子表单没有显示阴影?

时间:2012-07-23 10:20:10

标签: windows winforms mdi aero mdichild

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

2 个答案:

答案 0 :(得分:4)

这很正常,完全靠设计。 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

桌面窗口管理器(DWM)负责Windows Vista和7中的Aero效果,只为顶级窗口添加阴影和玻璃透明度。您的MDI儿童窗户不符合此类治疗的资格。实际上,阴影并不是他们唯一缺少的东西 - 它们看起来像是使用Aero Basic主题绘制的,这在使用Aero主题的机器上非常有视觉冲突。

不幸的是,除了完全脱离MDI之外,没有别的办法。无论如何,多文档界面现在几乎已经被弃用了。这样的界面为人们提供了比原先预期更难的使用,并且它们几乎完全被废弃,特别是微软自己的软件。您会注意到,Microsoft Office使用多个顶级窗口,而不是使用MDI。您应该考虑使用自己的软件做同样的事情。

MDI的另一种流行替代方案是选项卡式界面,通常由Web浏览器使用。在这里,您有一个单一的顶级窗口,所有子窗口在此主窗口的顶部显示为“选项卡”。用户可以更容易和直观地在子窗口之间切换,而不是作为独立的MDI子项。

答案 1 :(得分:2)

我最终得到了答案,如果我像

这样的儿童形式制作表格
c.MdiParent =this;

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