我有一个带有属性的FlowLayoutPanel:
我是这样做的,这样添加到面板的每个项目都会添加到底部。
我添加到此面板的项目是usercontrols,它们本身具有FlowLayoutPanels,但它们具有标准行为(LeftToRight,WrapContents = true)。我遇到的问题是内部用户控件的FlowLayoutPanel没有调整大小以填充外部控件,但是当我在这些控件上将autosizing设置为true时,面板将不会包装其内容 - 这显然是一个已知问题。
如果它有助于想象我正在尝试做什么,它看起来像这样:
______________________________ | __________________________ | Outer box = exterior flowlayout | |Text____________________| | (TopDown, NoWrap) | | # # # # # # # # # # # #| | | | # # # # | | Interior boxes = usercontrols with text and a | |________________________| | flowlayoutpanel on them | __________________________ | (LeftToRight, Wrap) | |Text____________________| | | | # # # # # # # # # # # #| | # = pictures | | # # | | | |________________________| | |____________________________|
答案 0 :(得分:0)
我认为您不能将控件停靠在FlowLayoutPanel中,除非您使用自定义引擎创建子类LayoutEngine并创建自己的窗格版本。但是,这个问题有一个很棒的解决方案。使用TableLayoutPanel!由于您只需要1列,因此使用TableLayoutPanel非常容易。
唯一需要注意的是TLP最初需要有0行,然后以编程方式添加用户控件。诀窍是将用户控件停靠在Top上。这有效:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
TableLayoutPanel tlp1 = new TableLayoutPanel();
this.Controls.Add(tlp1);
tlp1.Dock = DockStyle.Fill;
for (int i = 0; i < 5; i++)
{
UserControl1 uc = new UserControl1();
uc.Dock = DockStyle.Top;
tlp1.Controls.Add(uc);
}
}
}
在这种情况下,UserControl1是一个用户控件,上面有一个FLP,里面有一堆按钮,所以我可以确认对接和流动是否有效。