我有一个表单,它是一个mdicontainer,并在顶部有一个菜单条。我向我的mdi容器中添加一个子表单,当我最大化孩子时,它会在菜单条上最大化。我想知道如何限制孩子在菜单栏下方最大化。任何帮助,将不胜感激。在有限的区域内最大化孩子mdi
回答
你的孩子的形式正在被最大化的方式是,儿童形式应该在MDI中最大化。它并不真正覆盖父表单的菜单条 - 它实际上是将它自己的菜单条与父表单条合并在一起。
让孩子形式只占用可用子区的MDI父(而不是与父菜单合并其菜单),把这样的代码在子窗体的Resize事件:
if (this.WindowState == FormWindowState.Maximized)
{
this.WindowState = FormWindowState.Normal;
this.Size = this.MdiParent.ClientSize;
this.Location = new Point(0, 0);
}
这将防止子窗口实际上被最大化。
我说“类似这样的代码”,因为这段代码无法正常工作。父窗体的ClientSize
属性给出了窗体的整体大小,而您只想使用MDI客户区的大小。我不知道该怎么做,显然这并不容易。看到这个问题:
您可以设置MaximumSize属性,以便它不会填满整个容器。
它的工作原理除了它将它一直放在顶部并离开底部的开放空间。如果我将位置设置在菜单栏下方,它将首次运行,但在此之后它会再次将其重新放回顶部。 – 2009-10-21 22:38:50
我知道这一个老问题,但我只是碰到了这对旧项目我的工作,所以这里的任何人看到这个答案。将Dock设置为DockStyle.Fill将为您提供所需的行为。
请注意,如果您尝试在具有DockStyle的窗口重新定位或调整窗口大小时,该窗口将会显示/看起来很奇怪。
为了达到这个目的,我订阅了MDI客户窗口的resize事件,如果窗口刚被最大化,我将它的DockStyle设置为Fill,将FormBorderStlye设置为FixedDialog(以防止调整大小),并将窗口状态设置为正常以防止发生最大化。
为防止用户在窗口处于“最大化状态”时移动窗口,我简单地覆盖了WndProc方法,并在窗口被移动(SC_MOVE)时进行处理并放置返回以防止操作生效。
- 1. Infragistics功能区遍历最大化的MDI子代
- 2. mdi子窗体最大化windowstate - BorderStyle
- 3. MDI父母孩子
- 4. C#MDI孩子没有显示
- 5. G1 GC是否具有最大区域大小或区域最大量?
- 6. 当我关闭最大化的MDI子表格
- 7. Vista上的MDI子窗体最大化问题
- 8. Delphi使用AnimateWindow创建最大化的MDI子项目
- 9. Delphi:最大化MDI项目中的子窗口
- 10. 面板中MDI父最大化
- 11. 最大化MDI表单行为
- 12. 仅限区域内的MKAnnotation
- 13. MDI孩子总是在顶部C#Winforms
- 14. 当MDI Child最大化时删除MDI容器窗体的默认MDI菜单
- 15. Mdi子窗口最大化与菜单栏合并
- 16. 如何更改活动的mdi孩子?
- 17. 如何将我的自定义控件的孩子限制在某个区域?
- 18. 将点插入有限的2D区域,并与现有点的距离最大
- 19. 如何在其windowstate =最大化的mdi容器窗体中显示子窗体?
- 20. Winforms MDI客户端区域的大小/位置
- 21. 显示MDI孩子始终位于其他MDI儿童之上
- 22. 孩子的div最大的div
- 23. C#:如何更改包含MDI子项的区域?
- 24. MDI子窗体没有得到最小化
- 25. 如何查找MDI父窗体的内容区域?
- 26. TabPane缩小到最大的孩子
- 27. 缩放父窗体的MenuStrip中最大化的MDI子项使用的图标
- 28. 从MDI中打开另一个孩子的窗口在MDI中打开窗口
- 29. 找到属于具有最大值的区域的最大值如何近似该区域的边界?
- 30. 仅在屏幕的有限区域内保持UIViews可见
男孩,三年后,我真的不知道我的意思是“它不是超级简单”,当我连接的答案给出了一个*超简单*的方法来确定这一点。 – MusiGenesis 2013-01-16 03:53:32