【问题标题】:Resizing a child form controls when resizing a Parent调整父窗体控件的大小时调整子窗体控件的大小
【发布时间】:2011-03-29 13:25:36
【问题描述】:

我正在尝试找出一种简单的方法来根据父表单的大小重新调整我的子表单的大小。即子窗体弹出父窗体(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. 现在我将父表单的大小增加到原来的大小。子窗体上的控件大小现在以更高的比例增加。而且这些控件也显得格格不入。

任何人都可以针对这种情况提出更好的方法吗?

干杯

【问题讨论】:

  • 您不能锚定您的子控件,以便它们都在各个方向上动态调整大小吗?
  • 不,即使我在各个方向锚定 TLBR。我看到我的子表单上的控件超出了正常大小。
  • 如何订阅 OnParentResized 事件? c#中没有这样的事件

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


【解决方案1】:

改变Parent From isMdiContainer为true,childform边框样式为none,则

在父表单中编辑这样的代码在你想要的地方。

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

通过锚属性编辑控件。

希望对你有帮助。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-05-17
      • 2013-04-30
      • 1970-01-01
      • 2023-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      相关资源
      最近更新 更多