【问题标题】:Nested flowlayout panel not wrapping嵌套的流程布局面板不换行
【发布时间】:2011-01-31 22:14:38
【问题描述】:

我有一个带有属性的 FlowLayoutPanel:

  • Dock = 填充(在用户控件中)
  • FlowDirection = 自上而下
  • WrapContents = 假

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

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

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

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

【问题讨论】:

    标签: winforms flowlayoutpanel


    【解决方案1】:

    我认为您不能将控件停靠在 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 的用户控件,其中有一堆按钮,因此我可以确认停靠和流动是否可以工作。

    【讨论】:

      猜你喜欢
      • 2011-06-30
      • 1970-01-01
      • 2017-11-23
      • 2012-09-04
      • 2023-03-12
      • 2022-01-19
      • 2011-11-18
      • 1970-01-01
      • 2014-07-09
      相关资源
      最近更新 更多