C#:如何让用户控件正确自动resize

我有一个UserControl ,它由Label (Top), FlowLayoutPanel (Fill,TopDown流程和无包装)和Panel (Bottom)组成。 用户控件根据获取的内容列表创建许多控件,并将它们添加到FlowLayoutPanel

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

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

现在,如何获取将包含此UserControl的表单以及其他一些我目前无法理解的控件,但我想这应该是一个单独的问题……

您可以使用UserControl的Anchor-和Dock属性来设置选项,以便控件的边缘“粘合”到UI的其他部分。 当UIresize时,您的控件将随之而来!

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

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

您的UserControl应如下所示:

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

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

注意SplitContainers因为它们经常会使autosize行为失去平衡。

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

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

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

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

此function可以封装到您自己的控件中,该控件inheritance自FlowLayoutPanel并覆盖ControlAdded方法。

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