显示无边界MDI子表单问题

时间:2016-05-28 13:29:59

标签: vb.net

我正在开发一个包含 MDI表单的项目。我的问题是当我打开 MDI子无边框表单时。我看到这一刻...

enter image description here

然后似乎没问题......

enter image description here

知道是什么原因引起的吗? 请注意,标题栏和底栏是自定义控件。 FormBorderStylenone !!!

1 个答案:

答案 0 :(得分:1)

Windows实际上不支持更改MDI子窗口的边框样式。操作系统允许您这样做,但它是一种不受支持的配置,很可能是错误的。

WinForms应该让你免受这些类型的担忧,所以这确实是一个设计缺陷。当您尝试修改MDI子级的FormBorderStyle属性时,应该抛出异常。实施MDI支持可能不是微软最重要的优先事项。即使WinForms在2001年首次发布时,它基本上已经死了。不再支持整个MDI范例,不再推荐在软件中使用。

正如你所见,你可以破解它以便它有效。但是你得到了这种闪烁效果,因为Windows试图绘制应该在那里的非客户区域。

两个更好的想法:

  1. 停止使用过时的MDI范例,找到一种不同的,更加用户友好的方式来实现您的UI。例如,单独的顶级表单。或者一系列标签。

  2. 停止使用破坏操作系统标准视觉外观的丑陋自定义“皮肤”,无法由用户自定义或禁用,并且往往是错误的。

  3. 如果您绝对 要执行此操作,并希望使其看起来不错,那么您将必须自己重新实现MDI范例。创建一个标准表单,作为您事实上的父级。然后,您将使用一系列UserControl类(或将TopLevel属性设置为False的表单),而不是使用MDI子表单。然后你可以删除系统绘制的边框,让你自己绘制一切。然后,UserControl对象将显示为“主”窗体的子窗口,就像任何其他控件一样。到现在为止还挺好。现在,丑陋的部分是你将负责自己管理这些孩子:必要时展示它们,必要时隐藏它们,允许用户在“主”形式中拖动它们,“最大化”和“最小化”的逻辑“他们等等你必须编写自己的代码才能做到这一点。我强烈建议不要这样做;得到这种类型的东西将是相当困难的,并且一旦你完成就会有可疑的价值。