题
我有一个mdicontainer的表单,顶部有一个菜单条。我将一个子表单添加到我的mdi容器中,当我最大化子表单时,它最大化了menustrip。我想知道如何限制孩子在menustrip以下最大化。任何帮助将不胜感激。
解决方案
您的儿童表格正在最大化,因为儿童形式应该在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属性,使其不会填满整个容器。
我知道这是一个古老的问题,但我刚刚在一个正在研究的旧项目中碰到了这个问题,所以这里有个人看到这个问题的答案。将Dock设置为DockStyle.Fill将为您提供所需的行为。
请注意,如果您尝试在具有DockStyle的情况下重新定位或调整窗口大小,窗口将会显得很奇怪。
为了实现这一点,我订阅了MDI客户端窗口的resize事件,如果窗口刚刚最大化,我将其DockStyle设置为Fill,将FormBorderStlye设置为FixedDialog(以防止调整大小),并将窗口状态设置为normal防止最大化发生。
为了防止用户在窗口处于“最大化状态”时移动窗口。我只是覆盖WndProc方法并在移动窗口时处理(SC_MOVE)并放置一个返回以防止该操作生效。
不隶属于 StackOverflow