我有一个用户控件,其中包含一组控件,可以重复用于在UI上显示数据。我尝试实现一个“弹出”选项,它将从窗体上的另一个容器(例如Panel)重新控制控件,创建一个新的选项卡页面,然后将控件添加到选项卡页面。 / p>
不幸的是,当控件添加到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!");
}
}
}
答案 0 :(得分:0)
我怀疑如果您将控件设置为Dock,那么它可能会忽略尝试更改其大小/位置。就个人而言,我会关闭Dock / Anchor / AutoSize行为,只需手动设置控件的位置和大小。我已经做了很多这类事情并且从来没有遇到过任何问题,所以我怀疑你只是在与一个自动布局选项进行斗争,而且它已经赢了。
如果您希望Dock为您完成工作,您可能需要启动选项卡以重新计算其布局? (有一个Control.LayoutEngine对象可以做到这一点,但我只是在这里假设一个可能的调查途径 - 我自己没有尝试过)
我希望无论如何都可以给你一些想法......
答案 1 :(得分:0)
首先将控件添加到容器控件中。潜入容器代码的内容,通过Reflector,它设置我的控件的最小/最大尺寸值正在重新定位。我错误地假设默认的最小/最大设置是设计者的默认设置。不幸的是,容器控制决定不同。去,去,反射器!当然,这种行为没有记录。
谢谢大家的帮助。