Winforms:带对接的FlowLayoutPanel

时间:2011-06-22 14:33:36

标签: c# winforms dock flowlayoutpanel

这是winforms。我正在创建一个用户控件,它基本上是一个充满其他用户控件的FlowlayoutControl。我需要添加的每个控件都停靠在前一个控件的顶部(从左到右)。不幸的是,看起来flowlayoutcontrol忽略了任何对接属性。有没有办法将控制器停靠在那里?我需要它从左到右填充项目,但项目应该像列表视图一样布局。真的没有我可以提供的代码,因为它是一个确定采取什么方法的事实。

3 个答案:

答案 0 :(得分:11)

让FlowLayoutPanel正确停靠是很棘手的。从原始问题来看,您需要类似列表视图的内容。重要的是要知道列表中的一个项目(最宽的一个)在FlowLayoutPanel中定义了一个“虚拟列”。其余的项目将遵循它。您可以通过将其中一个项目向右拖动来在VS设计器中证明这一点。 “虚拟列”将跟随它,如果您的其他项目已锚定,则它们将跟随虚拟列。

请注意,您无法锚定定义列的控件。没有什么可以锚定的,会发生奇怪的事情。

以编程方式执行所有操作,在FlowLayoutPanel上处理Layout事件,并将代码放在类似下面的代码中。重要的是,在设计器中,列表中的所有项目都不会停靠,并将其锚定设置为“无”。我昨天在这上面花了一天时间,在设计师那里做的就是让下面的代码工作的原因。

flowLayoutPanel.Controls[0].Dock = DockStyle.None;                
flowLayoutPanel.Controls[0].Width = flowLayoutPanel.DisplayRectangle.Width - lowLayoutPanel.Controls[0].Margin.Horizontal;

for (int i = 1; i < flowLayoutPanel.Controls.Count; i++)
{
    flowLayoutPanel.Controls[i].Dock = DockStyle.Top;
} 

答案 1 :(得分:4)

FlowLayoutPanel.FlowDirection Property表示FlowLayoutPanel控件的流向。

FlowLayoutPanel.WrapContents Property表示FlowLayoutPanel控件是应该包装其内容还是剪切内容。

答案 2 :(得分:1)

FlowLayoutPanel的对接属性适用于面板本身(如果您希望FlowLayoutPanel停靠在表单的左侧,等等),而不是其中的控件容器。

尝试使用DefaultPadding和DefaultMargin属性,这些属性适用于它包含的控件的间距