Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:如何让用户控件自动调整大小_C#_Winforms_Dynamic_User Controls - Fatal编程技术网

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