使用TableLayoutPanel自动调整表单大小,该表格动态填充其单元格中的控件

时间:2015-01-13 10:25:32

标签: c# winforms tablelayout

我的表格里面有一个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)的情况表单的维度与之前的相同,因此我手动调整表单的大小。我希望我的表单根据列号和行号自动调整大小。

有什么想法吗?

感谢

2 个答案:

答案 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方法来控制调整大小的时间。