自己做MDI吧

时间:2014-02-06 12:32:23

标签: c# winforms mdi

我创建了一个我要添加ToolStripContainer的MDI应用程序。我的第一次尝试是添加一个并将其停靠在Top上。我在这里遇到的问题是在容器ToolStrip内移动ToolStripPanel会创建一个不可见的额外Row

然后我看到this question并尝试使用ToolStripContainer的{​​{1}}来实现我自己动手的MDI界面。这样,我可以在MDI周围的任何地方放置ContentPanel

我的代码如下:

ToolStrips

一切都运作得非常好,但我想知道这是否聪明,以后我不会遇到问题吗?另外,如果可以,为什么要在Windows中使用整个MDI功能?

1 个答案:

答案 0 :(得分:2)

通过将TopLevel属性设置为 false ,表单实际上变成了UserControl。请注意,您必须将Visible属性显式设置为true,它不是自动的。

但是,肯定存在问题,它根本不像MDI子窗口。最大的问题应该是容易看到的,表格不能再被激活。它的标题栏非常引人注目,它将始终使用非活动窗口的颜色进行渲染。然而它仍然像标题栏一样工作,用户可以拖动窗口并移动它。其中有明确的失败模式,窗口将被剪切而没有滚动条。不仅如此,双击标题仍然可以最大化和最小化窗口。 MDI孩子的表现方式截然不同。在Windows 8.x中,框架的视觉风格是错误的,看起来像Win7框架,这是一个没有已知解决方法的怪癖。

实际上,你将FormBorderStyle属性设置为None,因此它的行为更像真正的子窗口。或者在WndProc()覆盖中写一堆相当讨厌的代码来驯服窗口,你将注定要重新发明一个不完美的MDI孩子。

这是嵌入表单的好方法。修复边框后唯一剩下的怪癖是表单仍然被添加到Application.OpenForms集合中。