我们将属性“Dock = Dockstyle.Fill”添加到我们的FlowLayoutPanel中,以便它调整大小并填充其父控件。现在我们向FlowLayoutPanel添加了两个GroupBox。这些应该与Panel具有相同的宽度,但是当我们使用“Dock = Dockstyle.Top”时它不起作用。
问题是,我们尝试使用“Width = Parent.Width”设置宽度。这可行,但通过我们的方法,通过XML文件创建UI,在我们想要设置宽度的那一刻,GroupBoxes还没有父级。它稍后将被添加到FlowLayoutPanel中。
顺便说一下,我们还将“FlowDirection = TopDown”添加到FlowLayoutPanel,但是如果GroupBoxes变小,它会将它们并排放置而不是TopDown。
因此,我们正在寻找一种方法将所有控件放在彼此之下,并使所有GroupBox与FlowLayoutPanel的宽度相同。
感谢您的帮助,
星
答案 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
您可以通过取消注释注释代码来反转项目的顺序。