廢話說那麼多了,進入正題,其實動態佈局很簡單,就是SizeType.Percent,大小100F就好了,代碼如下。
private void InitLayoutDemo()
{
TableLayoutPanel demoLayoutPanel = new TableLayoutPanel();
demoLayoutPanel.Dock = DockStyle.Fill;
this.Controls.Add(demoLayoutPanel);
int row = 3, col = 3;
DynamicLayout(demoLayoutPanel, row, col);
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
Button btn = new Button();
btn.Text = string.Format("({0},{1})", i, j);
btn.Dock = DockStyle.Fill;
demoLayoutPanel.Controls.Add(btn);
demoLayoutPanel.SetRow(btn, i);
demoLayoutPanel.SetColumn(btn, j);
}
}
}
/// <summary>
/// 動態佈局
/// </summary>
/// <param name="layoutPanel">佈局面板</param>
/// <param name="row">行</param>
/// <param name="col">列</param>
private void DynamicLayout(TableLayoutPanel layoutPanel, int row, int col)
{
layoutPanel.RowCount = row; //設置分成幾行
for (int i = 0; i < row; i++)
{
layoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
}
layoutPanel.ColumnCount = col; //設置分成幾列
for (int i = 0; i < col; i++)
{
layoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
}
}
注意,我這裏TableLayoutPanel也是動態添加的,如果TableLayoutPanel是已經拖放到Form裏面的,把原來的行列刪剩一行一列,且保證都是百分比100%。