这是在winforms中。我正在创建一个用户控件,它基本上是一个填充了其他用户控件的FlowlayoutControl。我需要添加的每个控件都停靠在前一个控件的顶部(从左到右)。不幸的是,看起来flowlayoutcontrol忽略了任何停靠属性。有没有办法停靠里面的控件?我需要它从左到右填充项目,但项目应该像列表视图一样布局。由于这是找出采取什么方法的问题,所以真的没有可以提供的代码。
将 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 控件是否应该换行其内容或让内容被剪切。
TableLayoutPanel
放在一个 Panel
里面? - Akram ShahdaFlowLayoutPanel的停靠属性适用于面板本身(例如,如果您想要将FlowLayoutPanel停靠在表单的左侧等),而不是其中控件的容器。
尝试调整DefaultPadding和DefaultMargin属性,这些属性适用于它包含的控件的间距。