C#:如何让用户控件正确自动调整大小

时间:2009-08-31 07:24:57

标签: c# winforms dynamic user-controls

我有一个UserControl,其中包含Label(顶部),FlowLayoutPanel(填充,TopDown流程和无包装)和Panel(底部)。用户控件根据获取的内容列表创建许多控件,并将它们添加到FlowLayoutPanel

如何让UserControl正确调整自身大小以使FlowLayoutPanel没有任何滚动条?我试图在AutoSizeAutoSizeMode本身上使用FlowLayoutPanelUserControl的各种组合,但我似乎无法使其正常工作。要么我最终得到的东西根本没有自我调整,要么它不会变得足够大,或者它被压缩到几乎没有。

5 个答案:

答案 0 :(得分:11)

感谢所有建议。这次的解决方案似乎为AutoSize true本身设置了FlowLayoutPanelUserControl

现在,如何获取包含此UserControl以及其他一些控件的表单,我目前还不太清楚,但我想这应该是一个单独的问题...

答案 1 :(得分:5)

您可以使用UserControl的Anchor-和Dock属性来设置选项,以便控件的边缘“粘合”到UI的其他部分。当UI调整大小后,您的控件将继续执行!

如果您在用户控件中的所有控件上使用锚点和停靠点并将它们设置为停靠控件的边缘,则控件将使用UserControl调整大小,您现在也可以将锚点/停靠点设置为UserControl。

答案 2 :(得分:2)

FlowLayoutPanel包裹在TableLayoutPanel中将允许适当的自动调整行为。

您的UserControl应如下所示:

UserControl
    TableLayoutPanel (Dock-Fill)
        Row1 : Label
        Row2 : FlowLayoutPanel (Panel:Dock-Fill AND AutoSize, Row:AutoSize)
        Row3 : Panel

同样,在使用UserControl时,您可能需要使用TableLayoutPanel行或列将其包装在AutoSize中。

注意SplitContainers因为他们经常会使自动调整行为失去平衡。

答案 3 :(得分:0)

我发现解决此问题的最佳方法是在flowlayoutpanel上的ControlAdded事件中使用一些代码来调整面板的高度(因为您使用的是TopDown流,因此高度为):

e.Control.Location.Y + e.Control.Height + some margin

并将usercontrol本身的AutoSize属性设置为True。

根据Mickel的回答,你还需要做一些对接和锚定建议。

此功能可以封装到您自己的控件中,该控件继承自FlowLayoutPanel并覆盖ControlAdded方法。

答案 4 :(得分:0)

在向flowlayout添加控件时,您可以将已添加的控件调整为所需大小,而无需获取流布局面板的滚动条.l