【问题标题】:C#: How to get a user control to properly auto size itselfC#:如何让用户控件正确地自动调整大小
【发布时间】:2009-08-31 07:24:56
【问题描述】:

我有一个UserControl,它由一个Label(顶部)、一个FlowLayoutPanel(填充、自上而下的流动和不换行)和一个Panel(底部)组成。用户控件根据其获取的内容列表创建许多控件,并将它们添加到FlowLayoutPanel

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

【问题讨论】:

    标签: c# winforms dynamic user-controls


    【解决方案1】:

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

    现在,如何获取将包含此 UserControl 以及其他一些控件的表单,我目前还不太清楚,但我想这应该是一个单独的问题.. .

    【讨论】:

    • 这是一个link 回答如何将 UserControl 加载到表单上。基本上要么将您的程序集添加到工具箱或重建解决方案。
    【解决方案2】:

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

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

    【讨论】:

    • 我知道,但我不希望控件根据其父级调整大小。我希望它增长或缩小,以便它足够大以覆盖FlowLayoutPanel 的内容,而不会出现滚动条或剪切任何内容。
    【解决方案3】:

    FlowLayoutPanel 包装在TableLayoutPanel 中将允许正确的自动调整大小行为。

    您的UserControl 应如下所示:

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

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

    注意SplitContainers,因为他们经常使自动调整大小行为失去平衡。

    【讨论】:

      【解决方案4】:

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

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

      并将用户控件本身的 AutoSize 属性设置为 True。

      您还需要按照 Mickel 的回答做一些对接和锚定建议。

      此功能可以封装到您自己的控件中,该控件继承自 FlowLayoutPanel 并覆盖 ControlAdded 方法。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-30
          • 2019-07-05
          • 2016-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多