1

我有一个用户控件,其中包含一组控件,这些控件可用于在 UI 上呈现数据。我已经尝试实现一个“弹出”选项,它将从表单上的另一个容器(例如面板)重新设置控件的父级,创建一个新的选项卡页,然后将控件添加到选项卡页。

不幸的是,当控件被添加到 TabPage 时,它​​的大小似乎被锁定为它与最后一个父级一起呈现的方式。

我覆盖了 ParentChanged 事件以检测控件何时实际添加到 TabPage。如果我检查大小,尝试将大小设置为 TabPage 的 ClientRectangle,然后重新检查大小 - 它不会改变。设置 Dock 属性不会改变这种行为(尤其是 Fill)。

protected override void OnParentChanged(EventArgs e)
{
    if (this.Parent != null)
    {
        Size oldSize = this.Size;

        this.Size = this.Parent.ClientRectangle.Size;

        if (this.Size == oldSize)
        {
            // this is where we end up
            throw new Exception("We didn't change size!");
        }
    }
}
4

2 回答 2

0

该控件首先添加到容器控件中。通过 Reflector 深入容器代码的内部,它正在为我的控件设置最小/最大大小值,该控件正在重新设置父级。我不准确地假设默认的最小/最大设置是设计者的默认设置。不幸的是,容器控件的决定不同。去吧,去吧,反射器!当然,这种行为没有记录在案。

谢谢大家的帮助。

于 2010-03-10T19:11:42.963 回答
0

我怀疑如果您将控件设置为 Dock,那么它可能会忽略更改其大小/位置的尝试。我个人会关闭 Dock/Anchor/AutoSize 行为并手动设置控件的位置和大小。我做过很多这类事情,从来没有遇到过任何问题,所以我怀疑你只是在与自动布局选项作斗争,而且它正在获胜。

如果您希望 Dock 为您完成工作,您可能需要启动选项卡以重新计算其布局?(有一个 Control.LayoutEngine 对象可能能够做到这一点,但我只是在这里假设一个可能的调查途径 - 我自己没有尝试过)

无论如何,我希望这能给你一些想法......

于 2010-03-10T18:59:24.850 回答