C#:如何让用户控件自动调整大小
我有一个C#:如何让用户控件自动调整大小,c#,winforms,dynamic,user-controls,C#,Winforms,Dynamic,User Controls,我有一个用户控件,它由一个标签(顶部)、一个流程布局面板(填充、自上而下流动和不包裹)和一个面板(底部)组成。用户控件根据它获得的内容列表创建许多控件,并将它们添加到FlowLayoutPanel 如何使此UserControl正确调整自身大小,使FlowLayoutPanel没有任何滚动条?我曾尝试在FlowLayoutPanel上使用AutoSize和AutoSizeMode的各种组合,以及UserControl本身,但我似乎无法让它工作。要么我最终得到的东西根本无法调整自身大小,要么它不够
用户控件
,它由一个标签
(顶部)、一个流程布局面板
(填充、自上而下流动和不包裹)和一个面板
(底部)组成。用户控件根据它获得的内容列表创建许多控件,并将它们添加到FlowLayoutPanel
如何使此
UserControl
正确调整自身大小,使FlowLayoutPanel
没有任何滚动条?我曾尝试在FlowLayoutPanel
上使用AutoSize
和AutoSizeMode
的各种组合,以及UserControl
本身,但我似乎无法让它工作。要么我最终得到的东西根本无法调整自身大小,要么它不够大,要么它被压扁成几乎什么都没有。您可以使用UserControl的锚定和停靠属性来设置选项,以便控件的边缘“粘合”到UI的其他部分。当UI调整大小时,您的控件也会随之调整
如果在用户控件中的所有控件上使用锚定和停靠,并将其设置为停靠控件的边缘,控件将随UserControl调整大小,您现在也可以将锚定/停靠设置为UserControl。我发现解决这一问题的最佳方法是在flowlayoutpanel上的ControlAdded事件中使用一些代码,将面板的高度(由于使用自上而下的流而产生的高度)调整为: 并将usercontrol本身的AutoSize属性设置为True 根据米克尔的回答,你还需要做一些对接和锚定建议
此功能可以封装到从FlowLayoutPanel继承的您自己的控件中,并重写ControlAdded方法。将
FlowLayoutPanel
包装在表格布局面板
中将允许正确的自动调整大小行为
您的UserControl
应该如下所示:
UserControl
TableLayoutPanel (Dock-Fill)
Row1 : Label
Row2 : FlowLayoutPanel (Panel:Dock-Fill AND AutoSize, Row:AutoSize)
Row3 : Panel
同样,在使用该UserControl
时,可能需要使用自动调整行或列的大小,将其包装在表格布局面板中
请注意拆分容器,因为它们经常会使自动调整大小的行为失去平衡。在向flowlayout添加控件时,您可以将已添加的控件调整为所需大小,而无需获得flow layout面板的滚动条。l感谢所有建议。这一次的解决方案似乎将FlowLayoutPanel
和UserControl
本身的AutoSize
设置为true
现在,如何获得包含此UserControl
以及其他一些控件的表单,我现在还不太清楚,但我想这应该是一个单独的问题…我知道,但我不希望控件根据其父控件调整大小。我想让它变大或变小,这样它就足以覆盖FlowLayoutPanel
的内容,而不会得到滚动条或剪切任何内容。@Macke这就像6年前一样,所以我不知道,呵呵。也许在我问这个问题的时候搜索我提出的问题:Sphere是如何将UserControl加载到表单的答案。基本上,要么将程序集添加到工具箱,要么重新生成解决方案。
UserControl
TableLayoutPanel (Dock-Fill)
Row1 : Label
Row2 : FlowLayoutPanel (Panel:Dock-Fill AND AutoSize, Row:AutoSize)
Row3 : Panel