将控件停靠在停靠的FlowLayoutPanel中

时间:2015-10-01 11:48:55

标签: xml vb.net winforms layout controls

我们将属性“Dock = Dockstyle.Fill”添加到我们的FlowLayoutPanel中,以便它调整大小并填充其父控件。现在我们向FlowLayoutPanel添加了两个GroupBox。这些应该与Panel具有相同的宽度,但是当我们使用“Dock = Dockstyle.Top”时它不起作用。

问题是,我们尝试使用“Width = Parent.Width”设置宽度。这可行,但通过我们的方法,通过XML文件创建UI,在我们想要设置宽度的那一刻,GroupBoxes还没有父级。它稍后将被添加到FlowLayoutPanel中。

顺便说一下,我们还将“FlowDirection = TopDown”添加到FlowLayoutPanel,但是如果GroupBoxes变小,它会将它们并排放置而不是TopDown。

因此,我们正在寻找一种方法将所有控件放在彼此之下,并使所有GroupBox与FlowLayoutPanel的宽度相同。

感谢您的帮助,

1 个答案:

答案 0 :(得分:3)

在您描述的情况下,当您只需要自上而下的流程时,您可以简单地使用Panel而不是FlowLayoutPanel。将面板AutoScroll设置为true,将Dock设置为Fill,然后将组框添加到面板,并将它们的Dock属性设置为Top

注意:
对于FlowLayoutPanel的未来使用,您可能会发现这有用:

  

How to: Anchor and Dock Child Controls in a FlowLayoutPanel Control

     

这是在FlowLayoutPanel控件中锚定和停靠的一般规则:

     

对于垂直流向,FlowLayoutPanel控件计算   从最宽的子控件中隐含列的宽度   柱。此列中包含Anchor或Dock的所有其他控件   对齐或拉伸属性以适合此隐含列。该   行为以类似的方式对水平流动方向起作用。该   FlowLayoutPanel控件计算隐含行的高度   行中最高的子控件,以及所有停靠或锚定的子项   对齐或调整此行中的控件以适合隐含的行。

示例:

例如,如果您运行以下代码:

for (int i = 0; i < 5; i++)
{
    var control = new GroupBox()
    {
        Text = i.ToString(),
        Dock = DockStyle.Top,
        Height = 40
    };

    this.panel1.Controls.Add(control);
    //To reverse the order, uncomment following line
    //control.BringToFront();
}

结果将是:

4
3
2 
1
0

您可以通过取消注释注释代码来反转项目的顺序。