我有一个UserControl
,其中包含Label
(顶部),FlowLayoutPanel
(填充,TopDown流程和无包装)和Panel
(底部)。用户控件根据获取的内容列表创建许多控件,并将它们添加到FlowLayoutPanel
。
如何让UserControl
正确调整自身大小以使FlowLayoutPanel
没有任何滚动条?我试图在AutoSize
和AutoSizeMode
本身上使用FlowLayoutPanel
和UserControl
的各种组合,但我似乎无法使其正常工作。要么我最终得到的东西根本没有自我调整,要么它不会变得足够大,或者它被压缩到几乎没有。
答案 0 :(得分:11)
感谢所有建议。这次的解决方案似乎为AutoSize
和 true
本身设置了FlowLayoutPanel
到UserControl
。
现在,如何获取包含此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