C#: 如何使用户控件正确自适应大小

24

我有一个UserControl,它由一个Label(上部)、一个FlowLayoutPanel(填充、从上到下流动且不换行)和一个Panel(底部)组成。用户控件会创建一些控件,基于其获取的一系列内容,并将它们添加到FlowLayoutPanel中。

我该如何使这个UserControl自适应地调整大小,以便FlowLayoutPanel没有滚动条?我已经尝试在FlowLayoutPanelUserControl本身上使用各种组合的AutoSizeAutoSizeMode,但似乎都无法正常工作。要么最终得到的结果根本没有自适应大小,要么不能变得足够大,或者被压缩到几乎没有。

5个回答

13

感谢所有的建议。这次的解决方法似乎是将FlowLayoutPanelUserControl本身的AutoSize都设置为true

现在,如何获取将包含此UserControl以及其他一些控件的窗体,我暂时还无法完全理解,但我想这应该是一个单独的问题...


以下是关于如何将用户控件加载到表单上的答案链接:链接。基本上,您需要将您的程序集添加到工具箱中或者重新构建解决方案。 - sonyisda1

5
你可以使用UserControl的Anchor和Dock属性来设置选项,使你的控件的边缘“粘着”在UI的其他部分。当UI被调整大小时,你的控件将跟随调整!如果你在用户控件中使用锚定和停靠,将它们设置为停靠控件的边缘,那么控件将随着UserControl一起调整大小,现在也可以将锚点/停靠设置到UserControl上。

4
我知道,但我不想让控件根据其父级大小调整大小。我希望它可以自动增长或缩小,以便刚好足够覆盖“FlowLayoutPanel”中的内容,而不会出现滚动条或截断任何内容。 - Svish

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,因为它们经常会打破自动调整大小的行为。


0

在将控件添加到流式布局中时,您可以调整已添加的控件的大小以满足要求,而不会出现流式布局面板的滚动条。


0
我发现解决这个问题的最佳方法是在FlowLayoutPanel的ControlAdded事件中使用一些代码来调整面板的高度(因为您正在使用TopDown流)以达到以下高度:
e.Control.Location.Y + e.Control.Height + some margin

并将AutoSize属性设置为True。

您还需要根据Mickel的答案进行一些停靠和锚定建议。

此功能可以封装在从FlowLayoutPanel继承并覆盖ControlAdded方法的自定义控件中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接