FlowLayoutPanel 自动调整大小

Pio*_*nda 5 c# flowlayoutpanel windows-forms-designer winforms

我在父容器中有流布局面板停靠(填充)。父容器 DockStyle 设置为 Top。此外,我将流布局面板的 FlowDirection 属性设置为 LeftToRight,并将两个容器的 AutoSize 属性设置为 True。流布局面板的主要功能是保持动态添加的按钮。

创建按钮的代码

Button productButton = new Button();
productButton.AutoSize = true;
productButton.AutoEllipsis = false;
productButtonPanel.Controls.Add(productButton);
Run Code Online (Sandbox Code Playgroud)

有足够的空间在一行中保留 10-12 个按钮,并且 FlowLayoutPanel 做得很好。它将所有新按钮保持在一行中。问题是 FlowLayoutPanel 每次添加新 Button 时都会(垂直)调整大小,即使不需要额外的空间(“新按钮行”)。

Loa*_*ing 1

也许AutoSizeMode = AutoSizeMode.GrowAndShrink;会解决你的问题。例如

        Form f = new Form();
        Panel parent = new Panel { Dock = DockStyle.Top, BackColor = Color.Blue, AutoSize = true  };

        FlowLayoutPanel p1 = new FlowLayoutPanel { FlowDirection = System.Windows.Forms.FlowDirection.LeftToRight };
        p1.BackColor = Color.Red;
        p1.AutoSize = true;
        p1.AutoSizeMode = AutoSizeMode.GrowAndShrink;

        Button b1 = new Button { Text = "Button1", AutoSize = true, AutoEllipsis = false };
        p1.Controls.Add(b1);
        b1.Click += delegate {
            Button b2 = new Button { Text = "Button" + (p1.Controls.Count + 1), AutoSize = true, AutoEllipsis = false };
            p1.Controls.Add(b2);
        };
        parent.Controls.Add(p1);
        f.Controls.Add(parent);
        Application.Run(f);
Run Code Online (Sandbox Code Playgroud)