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