Winforms:带对接的FlowLayoutPanel

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

FlowLayoutPanel.FlowDirection属性指示FlowLayoutPanel控件的流向。

FlowLayoutPanel.WrapContents属性指示FlowLayoutPanel控件是应该包装其内容还是剪切内容。

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

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

以编程方式执行所有操作,在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; } 

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

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