嵌套的flowlayout面板不包装

时间:2010-03-25 20:32:59

标签: winforms flowlayoutpanel

我有一个带有属性的FlowLayoutPanel:

  • Dock = Fill(在用户控件中)
  • FlowDirection = TopDown
  • WrapContents = false

我是这样做的,这样添加到面板的每个项目都会添加到底部。

我添加到此面板的项目是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
    | | # #                    | |
    | |________________________| |
    |____________________________|

1 个答案:

答案 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,里面有一堆按钮,所以我可以确认对接和流动是否有效。