1

我有一个带有属性的 FlowLayoutPanel:

  • Dock = Fill(在用户控件中)
  • 流向 = 自上而下
  • WrapContents = 假

我这样做是为了让添加到面板的每个项目都添加到底部。

我添加到此面板的项目是用户控件,它们本身具有 FlowLayoutPanel,但是它们具有标准行为(LeftToRight,WrapContents = true)。我遇到的问题是内部用户控件的 FlowLayoutPanel 没有调整大小以填充外部控件,但是当我在这些控件上将 autosizing 设置为 true 时,面板不会包装其内容 - 这显然是一个已知问题.

如果它有助于可视化我正在尝试做的事情,它看起来像这样:

    _____________________________
    | __________________________ | 外箱 = 外部流程布局
    | |文字____________________| | (自上而下,NoWrap)
    | | ############| |
    | | # # # # | | 内部框 = 带有文本和
    | |________________________| | flowlayoutpanel 在他们身上
    | __________________________ | (从左到右,换行)
    | |文字____________________| |   
    | | ############| | # = 图片
    | | # # | |
    | |________________________| |
    |____________________________|
4

1 回答 1

0

我认为您不能将控件停靠在 FlowLayoutPanel 中,除非您将 LayoutEngine 子类化并使用自定义引擎制作自己的窗格版本。但是,这个问题有一个很棒的解决方案。使用 TableLayoutPanel!由于您只需要 1 列,因此很容易为此目的使用 TableLayoutPanel。

唯一需要注意的是,TLP 最初需要有 0 行,然后您以编程方式添加用户控件。诀窍是将用户控件停靠到顶部。这有效:

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 的用户控件,其中有一堆按钮,因此我可以确认对接和流动是否可以工作。

于 2010-03-26T04:07:30.053 回答