2010-03-10 61 views
1

我有一个用户控件,其中包含一组控件,以便在UI中呈现数据时重用它们。我已经尝试实现“弹出”选项,将重新从父窗体上的另一个容器控件(一个面板,例如),创建一个新的标签页,然后将控件添加到标签页。如何修改已重新添加到TabPage的控件?

不幸的是,当控件添加到TabPage时,它的大小似乎被锁定到最后一个父对象的显示方式。

我覆盖了ParentChanged事件来检测控件何时实际添加到TabPage。如果我检查大小,请尝试将大小设置为TabPage的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!"); 
     } 
    } 
} 

回答

0

控制首先加入到一个容器控件。通过反射器潜入容器代​​码的肠内,它为正在重新设置的控件设置最小/最大大小值。我错误地认为默认的最小/最大设置保留为设计者的默认设置。容器控制不幸的是决定不同。去,去,反射!这种行为当然没有记录。

感谢大家的帮助。

0

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

如果你想码头为你做的工作,你可能需要踢启动其布局的重新计算的标签? (有一个Control.LayoutEngine对象可以做到这一点,但我只是在这里假设一个可能的调查途径 - 我自己没有尝试过)

我希望这可能会给你一些想法,反正...

相关问题