自动调整大小以填充所有多面板

Auto resize to fill all multi panels

如何在不更改面板大小的情况下将所有面板的大小设置为填写 form1 window?我搜索了 Google。很难找到。这就是为什么我想帮忙。喜欢下面谢谢。

如果 3 个面板将调整大小:

4 个面板:

5 个面板:

9 个面板:

您可以使用 FlowLayoutPanel。插入您的表单并在设计器中设置 Dock=Fill。将此常量添加到您的表单中:

private const int PanelSize = 200;

在构造函数中:

this.flowLayoutPanel1.Resize += this.OnFlowLayoutPanel1_Resize;
this.OnFlowLayoutPanel1_Resize(this.flowLayoutPanel1, EventArgs.Empty);

并使用此方法 create/destroy 面板:

private void OnFlowLayoutPanel1_Resize(object sender, EventArgs e)
{
    // At least, one panel
    var columns = Math.Max(1, this.flowLayoutPanel1.Width / (double)PanelSize);
    var rows = Math.Max(1, this.flowLayoutPanel1.Height / (double)PanelSize);

    var panelsCount = this.flowLayoutPanel1.Controls.Count;
    var requiredPanelsCount = rows * columns;
    var diff = requiredPanelsCount - panelsCount;
    if (diff > 0)
    {
        // We need more panels: create it
        for (int i = 0; i < diff; i++)
        {
            var panel = new Panel
            {
                Size = new Size(PanelSize, PanelSize),
                TabIndex = this.flowLayoutPanel1.Controls.Count, 
                BackColor = GetBackColor()
            };
            this.flowLayoutPanel1.Controls.Add(panel);
        }
    }
    else
    {
        // Remove unneeded panels
        for (int i = 0; i < diff; i++)
        {
            this.flowLayoutPanel1.Controls.RemoveAt(
                this.flowLayoutPanel1.Controls.Count - 1);
        }
    }
}

我已经用这个方法设置了颜色:

private Color GetBackColor()
{
    var colors = new[] 
    { 
        Color.Black, Color.Red, Color.Green, Color.Blue, Color.White
    };
    var index = this.flowLayoutPanel1.Controls.Count % colors.Length;
    return colors[index];
}

根据您的需要进行调整。

如果您需要填写整个表格,您必须使用变量 PanelSize。使用面板的最小和最大尺寸而不是固定值。

我是 creating/removing 个要填满整个 space 的面板。如果您只需要表单中的固定面板,则不需要调整大小事件。 FlowLayoutControl 做你需要的。