这是在winforms中。我正在创建一个用户控件,它基本上是一个填充了其他用户控件的 FlowlayoutControl。我需要添加的每个控件都停靠在前一个控件的顶部(从左到右)。不幸的是,flowlayoutcontrol 似乎忽略了任何停靠属性。有什么办法可以将控件停靠在里面吗?我需要它从左到右填充项目,但项目应该像列表视图一样布局。我真的没有代码可以提供,因为这是一个弄清楚要采取什么方法的问题。
3 回答
让 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;
}
FlowLayoutPanel.FlowDirection 属性表示 FlowLayoutPanel 控件的流向。
FlowLayoutPanel.WrapContents 属性指示 FlowLayoutPanel 控件是应该包装其内容还是让内容被剪裁。
FlowLayoutPanel 的停靠属性适用于面板本身(例如,如果您希望 FlowLayoutPanel 停靠在表单的左侧等),而不是其中的控件容器。
尝试使用 DefaultPadding 和 DefaultMargin 属性,它们适用于它包含的控件的间距