代码之家  ›  专栏  ›  技术社区  ›  Michael

如何修改已重新成为TabPage父级的控件?

  •  1
  • Michael  · 技术社区  · 15 年前

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

    不幸的是,将该控件添加到选项卡页时,其大小似乎已锁定为与最后一个父级显示的方式。

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

    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!");
            }
        }
    }
    
    2 回复  |  直到 15 年前
        1
  •  0
  •   Jason Williams    15 年前

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

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

    我希望这能给你一些建议,不管怎样…

        2
  •  0
  •   Michael    15 年前

    首先将该控件添加到容器控件中。通过Reflector潜入容器代码的内部,它为正在重新编写的控件设置最小/最大大小值。我不准确地假定默认的最小/最大设置保留为设计者的默认设置。不幸的是,容器控制的决定不同。快,快,反光镜!当然,这种行为没有记录在案。

    谢谢大家的帮助。