我的表格里面有一个TableLayoutPanel,它有1行1列。我用控件填充这个TableLayoutPanel。
首先我创建表:
private void generateTable(int columnCount, int rowCount)
{
//Clear out the existing controls, we are generating a new table layout
tblLayout.Controls.Clear();
//Clear out the existing row and column styles
tblLayout.ColumnStyles.Clear();
tblLayout.RowStyles.Clear();
//Now we will generate the table, setting up the row and column counts first
tblLayout.ColumnCount = columnCount;
tblLayout.RowCount = rowCount;
for (int x = 0; x < columnCount; x++)
{
//First add a column
tblLayout.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
for (int y = 0; y < rowCount; y++)
{
//Next, add a row. Only do this when once, when creating the first column
if (x == 0)
{
tblLayout.RowStyles.Add(new RowStyle(SizeType.AutoSize));
}
}
}
}
然后在其单元格中添加控件:
tblLayout.Controls.Add(my_control, column, row);
我还创建了此函数,以根据TableLayoutPanel的行数和列数调整表单大小。
private void forceSizeLocationRecalc()
{
this.Height = 0;
this.Width = 0;
int col = this.tblLayout.ColumnCount;
int row = this.tblLayout.RowCount;
for (int i = 0; i < row; i++)
{
this.Height += this.tblLayout.GetControlFromPosition(0, i).Height;
}
for (int i = 0; i < col; i++)
{
this.Width += this.tblLayout.GetControlFromPosition(i, 0).Width;
}
}
并在表单设置结束时调用它。
问题是,例如,如果我首先是tableLayout(col = 2,row = 3),并且i传递给表布局为(col = 3,row = 1)的情况表单的维度与之前的相同,因此我手动调整表单的大小。我希望我的表单根据列号和行号自动调整大小。
有什么想法吗?
感谢
答案 0 :(得分:0)
假设我已正确理解您,请确保tblLayout
设置了自动尺寸属性,然后将函数forceSizeLocationRecalc
替换为:
private void forceSizeLocationRecalc()
{
this.Width = this.tblLayout.Width;
this.Height = this.tblLayout.Height;
}
然后,这将强制表单采用表格布局面板的大小。显然,当表格更改时,您仍然需要手动调用它。
您可以在构建表格布局面板的位置添加它,以防止必须这样做:
this.tblLayout.SizeChanged += delegate { this.forceSizeLocationRecalc(); };
希望有所帮助!
答案 1 :(得分:0)
将TableLayoutPanel和Form AutoSize属性设置为true。 这意味着TableLayoutPanel会根据其内容的大小(添加的控件)自动调整大小,并根据窗口内容(TableLayoutPanel)自动调整窗体大小。
如果调整大小没有自动完成或看起来很蠢,你可以使用SuspendLayout,ResumeLayout和PerformLayout方法来控制调整大小的时间。