获取用户控件以填充其容器

时间:2009-06-17 13:16:36

标签: c# winforms size user-controls

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

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

3 个答案:

答案 0 :(得分:4)

我认为问题是因为您实际上并不希望控件“流”,您只是希望它们占用主机控件中的最顶层位置。您只需使用常规的Panel控件即可获得所需的结果。只需将子用户控件添加到容器控件的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的名称。

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

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