FlowLayoutPanel - 控件的自动宽度?

时间:2011-03-22 18:01:10

标签: .net vb.net resize flowlayoutpanel

是否可以使FlowLayoutPanel中的插入项自动调整为FlowLayoutPanel?这是一个例子:

包含1个FlowLayoutPanel和3个按钮的表单:

enter image description here

如果我调整表单大小,控件看起来像这样:他们安排“从左到右”

enter image description here

我想要的是:控件应该具有FlowLayoutPanel的宽度:

enter image description here

任何想法如何做到这一点?我更改了FlowDirection并使用了Anchor属性,但没有运气。

我当然可以调整FlowLayoutPanel_Resize事件中的控件,但我想添加大约500个用户控件 - 我测试了它并且速度很慢。

7 个答案:

答案 0 :(得分:37)

我建议你在这种情况下使用TableLayoutPanel和一列。我发现TableLayoutPanel比FlowLayoutPanel更可预测和更可靠。

如果您仍想使用FlowLayoutPanel,另一个选项是将第一个控件宽度设置为所需的控件宽度,并将Dock = Top用于所有其他控件。

答案 1 :(得分:18)

这是一种简单的方法。 只需绑定flowLayoutPanel的SizeChanged事件并调整包含控件的大小。 像:

private void myFlowLayoutPannel_SizeChanged(object sender, EventArgs e)
{
    myFlowLayoutPannel.SuspendLayout();
    foreach (Control ctrl in pnSMS.Controls)
    {
        if (ctrl is Button) ctrl.Width = pnSMS.ClientSize.Width;
    }
    myFlowLayoutPannel.ResumeLayout();
}

答案 2 :(得分:6)

这里我有StackPanel类:

result= np.append(c, [a], axis=0)

答案 3 :(得分:2)

我建议...尝试使用按钮的锚点...尝试将其设置为

Button1.Anchor = (AnchoreStyle.Left or AnchoreStyle.Right)

或 在属性中设置它......

然后将其放在Panel而不是FlowLayoutPanel ...;)

答案 4 :(得分:2)

FlowLayoutPanel根据MSDN

以特定方式排列控件
  

...对于垂直流向,FlowLayoutPanel控件计算   从最宽的子控件中隐含的列的宽度   柱即可。此列中包含锚点 Dock 的所有其他控件   对齐或拉伸属性以适合此隐含列。该   对于水平流向,行为的作用方式类似。

它不理想,但只要一个子控件设置为与容器相同的宽度,并且其余控件设置为Dock,就可以本机执行此操作。

答案 5 :(得分:1)

这里不需要FlowLayoutPanel

您应该能够使用常规的Panel控件执行所需的操作。 将其固定在所有四个侧面上,以使其与您的窗体一起伸展,然后添加按钮并将其全部设置为Dock:Top。

完成工作。

答案 6 :(得分:0)

正如其他答案所述,面板本身足以处理您的按钮。对我有用的一些代码:

public class ButtonWindow : Panel
{
    public ButtonWindow()
    {
        Dock = DockStyle.Fill;
        AutoScroll = true;

        for (int i = 0; i < 500; i++) 
        {
           Button button = new Button() { Height = 100, Dock = DockStyle.Top };
           Controls.Add(button);
        }
    }
}

今天愉快。