自动调整大小以填充所有多面板
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 做你需要的。
如何在不更改面板大小的情况下将所有面板的大小设置为填写 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 做你需要的。