【问题标题】:Getting a User Control to fill its container让用户控件填充其容器
【发布时间】:2009-07-01 10:08:28
【问题描述】:

我创建了一个包含标签和进度条的用户控件。我还创建了另一个用户控件,它只包含一个流向设置为自上而下的流布局面板。当我将前者添加到后者的流布局面板时,我希望它使用可用的最大水平空间量和最小量的垂直空间,以便尊重标签和进度条的默认高度。有没有办法做到这一点?

我已经上传了screenshot 来帮助说明问题。包含标签和进度条的用户控件为红色,包含流布局面板的用户控件为绿色。

【问题讨论】:

  • 问题的根源似乎是,如果将控件的 Dock 属性设置为“Top”或将其 Anchor 属性设置为,将控件添加到 FlowDirection 设置为 TopDown 的 FlowLayoutPanel 将导致它们消失“AnchorStyles.Left | AnchorStyles.Right”。

标签: c# winforms size user-controls


【解决方案1】:

我认为问题在于您实际上并不希望控件“流动”,而只是希望它们占用主机控件中的最高位置。您只需使用常规面板控件即可获得所需的结果。只需将子用户控件添加到容器控件的 Controls 集合中,然后将添加的用户控件的 Dock 设置为“Top”即可。

        ChildDisplay dsp1 = new ChildDisplay();
        pnlHost.Controls.Add(dsp1);
        dsp1.Dock = DockStyle.Top;

        ChildDisplay dsp2 = new ChildDisplay();
        pnlHost.Controls.Add(dsp2);
        dsp2.Dock = DockStyle.Top;

        ChildDisplay dsp3 = new ChildDisplay();
        pnlHost.Controls.Add(dsp3);
        dsp3.Dock = DockStyle.Top;

注意:将 [ChildDisplay] 替换为您正在使用的 UserControl 的名称。

【讨论】:

    【解决方案2】:

    只需将用户控件的 Dock 属性设置为 'Top'...

    UserControl.Dock = System.Windows.Forms.DockStyle.Top;
    

    【讨论】:

    • 在用户控件的构造函数中将 Dock 属性设置为 Top 会使它们不可见 - 我得到的只是绿色的流布局面板。
    【解决方案3】:

    控件的定位和分层有时可能很棘手。确保绿色流控件的 Dock 属性设置为 Fill。之后,开始放置标签控件并开始定位。如果需要,您可以将 Dock 属性设置为 Top,但在大多数情况下,我不喜欢它。我想说在设置控件位置时要记住的最重要的事情之一,尤其是在使用 Dock 属性时,就是顺序很重要。如果您看不到某个控件(即……它似乎隐藏在其他控件后面),请尝试重新排序它们添加到父控件的方式(在本例中为流控制面板)。如果您在 VS 中使用设计器,您可以通过右键单击并使用“发送到顶部/底部”命令来执行此操作(在使用 Dock 属性时非常有用,此外,您还可以在单​​击的位置查看哪些控件是分层的)。

    另外,在我看来,一个经常被忽视的选项是正确使用Control.Anchor。我建议看看它。

    【讨论】:

      猜你喜欢
      • 2011-09-26
      • 2011-02-24
      • 2012-11-08
      • 1970-01-01
      • 2021-08-27
      • 2019-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多