在调整父级大小时调整子窗体大小的大小

时间:2011-03-29 13:25:37

标签: c# .net winforms .net-2.0

我正在尝试找出一种基于父表单大小重新调整子表单大小的简单方法。即子表单弹出父表单(FixedToolWindow)。

要做到这一点,我现在通过在我的表单子类中使用OnParentResize事件来实现此目的。即

void OnParentResized(object sender, EventArgs e)
        {
            //Resize of the form shall be made only when the form is not minimized
            if (parent.WindowState != FormWindowState.Minimized)
            {
                int iWidth = parent.Size.Width;
                int iHeight = parent.Size.Height;

                double dXFactor = (double)iWidth / (double)this.Width;
                double dYFactor = (double)iHeight / (double)this.Height;
                this.Scale(new SizeF((float)dXFactor, (float)dYFactor)); 

            }
        }

行this.Scale(new SizeF((float)dXFactor,(float)dYFactor)); 缩放我孩子表格中的所有控件。

当我使用它时,我认为每当父表单调整大小时,我的子表单也会这样做。显然我在这里面临一个问题,子表单内的所有控件都锚定在左上角。

  1. 我的子表单中的所有控件都是正常大小。

  2. 调整父表单的大小以使其缩小,子表单也缩小到相同的因子。

  3. 现在我将父表单的大小增加回原始大小。子表单上控件的大小现在增加了更高的比率。并且控件显得格格不入。

  4. 任何人都可以为这种情况提出更好的方法。

    干杯

2 个答案:

答案 0 :(得分:2)

更改父级从isMdiContainer为true,子窗体边框样式为none,然后

在父表单中编辑这样的代码,如你想要的那样。

 foreach (var mdiChild in MdiChildren)
                mdiChild.Close();
  var childobj= new childform {MdiParent = this, Dock = DockStyle.Fill};
     childobj.Show();

通过锚属性编辑控件。

希望它对你有帮助。

答案 1 :(得分:0)

我猜你必须使用ClientRectangle的宽度和高度而不是Window的宽度和高度。因为您的客户端rect小于您的Windows矩形。这是一个初步猜测。