C# 如何修改已重新设置为选项卡页父级的控件?

C# 如何修改已重新设置为选项卡页父级的控件?,c#,.net,winforms,tabcontrol,tabpage,C#,.net,Winforms,Tabcontrol,Tabpage,我有一个用户控件,其中包含一组控件,这些控件可用于在UI上显示数据。我尝试实现一个“弹出”选项,该选项将从表单上的另一个容器(例如,一个面板)重新设置控件的父级,创建一个新的选项卡页面,然后将控件添加到选项卡页面 不幸的是,将控件添加到选项卡页时,其大小似乎被锁定为上一个父控件的显示方式 我重写ParentChanged事件以检测控件何时实际添加到选项卡页。如果我检查大小,尝试将大小设置为选项卡页的ClientRectangle,然后重新检查大小-它不会改变。设置Dock属性不会改变此行为(尤其

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

不幸的是,将控件添加到选项卡页时,其大小似乎被锁定为上一个父控件的显示方式

我重写ParentChanged事件以检测控件何时实际添加到选项卡页。如果我检查大小,尝试将大小设置为选项卡页的ClientRectangle,然后重新检查大小-它不会改变。设置Dock属性不会改变此行为(尤其是填充)


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

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


无论如何,我希望这可能会给您一些想法…

该控件首先添加到一个容器控件中。通过Reflector深入到容器代码的内部,它正在为正在重新分配的控件设置最小/最大大小值。我错误地假设默认的最小/最大设置保留为设计器的默认设置。不幸的是,集装箱管理部门的决定不同。走,走,反射镜!当然,这种行为没有记录在案

谢谢大家的帮助

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!");
        }
    }
}