自动调整winform的大小以适应动态创建的按钮c#

自动调整winform的大小以适应动态创建的按钮c#,c#,winforms,C#,Winforms,我在winform中有一个flowlayoutPanel,我动态创建了大量按钮,但是我遇到了一个问题,由于winform的大小,一些按钮不可见 这是我目前的代码: private void Form_Load(object sender, EventArgs e) { foreach (var v in KeyValuePairs) { Button b = new Button(); b.Text = v.Value; b.Acc

我在winform中有一个flowlayoutPanel,我动态创建了大量按钮,但是我遇到了一个问题,由于winform的大小,一些按钮不可见

这是我目前的代码:

private void Form_Load(object sender, EventArgs e)
{
    foreach (var v in KeyValuePairs)
    {
        Button b = new Button();
        b.Text = v.Value;
        b.AccessibleName = v.Key.ToString() ;
        b.FlatStyle = FlatStyle.Flat;
        b.Location = new Point(startposition, endPosition);
        b.BackColor = Color.White;
        b.Width = 90;
        b.Height = 40;
        b.Margin = new Padding(5);
        b.Click += new EventHandler(button_Click);
        flowLayoutPanel1.Controls.Add(b);
        endPosition += 100;            
    }
    this.Size = new System.Drawing.Size(endPosition, endPosition);
}

如何使winform以n个按钮流动?有没有合适的方法?我没有使用任何锚定。

使用
WrapContents=true选项。

这是否回答了您的问题?如果您的面板是100x100,则每次更改其大小时,都要将更改添加/减去到主窗体。您可以订阅resize事件或调用该事件的任何内容,并将所需代码放入其中。开箱即用的自动调整大小模式不能很好地工作。在设计期间,只需一个左右的按钮,就可以使表单看起来像您所希望的那样,然后使用这些数字作为指导。@ADyson这是在我的代码片段之前还是之后?你是说链接不是最好的选择,你有没有我可以参考的片段来做你建议的事情呢?该链接中发布了几种可能的解决方案,我不知道您指的是哪一种。如果使用
FlowLayoutPanel
,则您不指定
位置,该面板会处理该问题。您可能需要尝试
WrapContents=true选项。谢谢,这是最好的答案,然后我使用了:locationOnForm=b.FindForm().PointToClient(b.Parent.PointToScreen(b.Location));查找最后一个Y值,然后向整数中添加一些以增加窗体的高度。@学生正确的方法是:
FlowLayoutPanel=new FlowLayoutPanel{WrapContents=true,Dock=DockStyle.Fill};//为循环添加按钮;大小sz=panel.GetPreferredSize(新大小(400,int.MaxValue));f、 控件。添加(面板);f、 ClientSize=sz其中
400
是您所需的宽度。