2011-03-29 130 views
2

我试图找出一种基于父窗体大小重新调整子窗体大小的简单方法。即子窗体弹出父窗体(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. 现在我增加我的父表单的大小恢复到原始大小。儿童表格上的控件大小现在增加了一个较高的比例。而且这些控件显得不合适。

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

干杯

+0

你不能锚定你的子控件,以便它们都可以动态调整各个方向的大小吗? – FreeAsInBeer 2011-03-29 13:42:05

+0

不,即使我在所有方向锚定TLBR。我看到我的孩子表格上的控件超出了正常尺寸。 – 2011-03-29 13:46:36

+0

你如何订阅OnParentResized事件?在c#中没有这样的事件 – 0x64 2018-02-01 21:22:59

回答

0

我想你必须使用ClientRectangle的宽度和高度,而不是窗口的宽度和高度。因为你的客户端矩形小于你的窗口矩形。这是最初的猜测。

2

在家长改变从作为的IsMdiContainer真实,childform边框样式为无,然后

在这样父窗体编辑代码在你想要发泄。

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

编辑由Anchor属性的控件。

希望它对你有帮助。

相关问题