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

在我的应用程序中,当我将窗体作为主MDI父窗体的子窗体时,窗体停止在窗体背后显示Windows 7默认阴影效果。 我如何获得儿童forms的影子?

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

这是正常的,完全由设计。 MDI子窗口不是顶层窗口,而是一种特殊类型的子窗口,它被设计为托管在MDI父窗口中 。

桌面窗口管理器(DWM)负责Windows Vista和Windows 7中的Aero效果,只在顶层窗口中添加阴影和玻璃透明度。 您的MDI子窗口不符合这种待遇。 事实上,影子并不是他们唯一缺少的东西 – 它们看起来像是使用Aero Basic主题绘制的,而Aero Basic主题对于使用Aero主题的机器在视觉上非常刺耳。

不幸的是,除此之外,没有其他解决办法可以完全脱离MDI。 多文档界面现在几乎已经被弃用了。 这样的界面让人们使用起来比原先预想的要困难得多,并且几乎完全被废弃,尤其是微软自己的软件。 您会注意到,而不是使用MDI,Microsoft Office使用多个顶级窗口。 你应该考虑用自己的软件做同样的事情。

MDI的另一个流行替代方法是网页浏览器常用的选项卡式界面。 在这里,你有一个单一的顶层窗口,所有的子窗口在主窗口顶部显示为“选项卡”。 用户可以更容易和直观地在子窗口之间切换,而不是作为独立的MDI儿童。

我最终得到了答案,如果我把一个表格像孩子的形式

 c.MdiParent =this; 

它使得窗体的外观变得平坦,如果你喜欢将窗体显示为窗体的默认窗口,不要使窗体的mdi父窗体!