tablelayoutpanel 单元格未在 c# win 窗体中均匀填充
tablelayoutpanel cell not evenly padded in c# win forms
我在 运行 期间有一个 tablelayoutpanel.And 我正在动态生成一些标签,每个标签都有一个紫色的圆形 image.Now 每个 tablelayoutpanel 内均匀填充一些 images/labels单元格,但有些是 not.Please 看图片..
顶部 2 行的标签被均匀填充,而从第 3 行开始的行有 sh运行k。为什么会这样?需要做什么才能摆脱这个问题?提前致谢。
您应该将 ColumnStyles
and RowStyles
设置为合适的值。
例如,对于每一列和每一行,您可以使用 SizeType.Percent
or SizeType.Absolute
定义样式并为它们设置一个相等的值。
在下面的例子中:
- 我将
TableLayoutPanel
的 AutoSize
属性 设置为 true
- 将
Form
的 AutoScroll
属性 设置为真
- 使用等百分比 (
100/columnCount
) 将列样式设置为 SizeType.Percent
- 使用相等值
30
将行样式设置为 SizeType.Absolute
- 动态添加控件。
示例代码:
int columnCount = 4;
int rowCount = 13;
this.tableLayoutPanel1.ColumnCount = columnCount;
this.tableLayoutPanel1.RowCount = rowCount;
this.tableLayoutPanel1.ColumnStyles.Clear();
this.tableLayoutPanel1.RowStyles.Clear();
this.tableLayoutPanel1.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
this.tableLayoutPanel1.BackColor = Color.White;
this.tableLayoutPanel1.AutoSize = true;
for (int i = 0; i < columnCount; i++)
{
this.tableLayoutPanel1.ColumnStyles.Add(
new ColumnStyle(SizeType.Percent, 100 / columnCount));
}
for (int i = 0; i < rowCount; i++)
{
this.tableLayoutPanel1.RowStyles.Add(
new RowStyle(SizeType.Absolute, 30));
}
this.tableLayoutPanel1.SuspendLayout();
for (var i = 1; i <= 50; i++)
{
var label = new Label();
label.Text = i.ToString();
label.Font = new Font(label.Font, FontStyle.Bold);
label.AutoSize = false;
label.Size = new Size(30, 30);
label.Image = Properties.Resources.Circle;
label.ImageAlign = ContentAlignment.MiddleCenter;
label.TextAlign = ContentAlignment.MiddleCenter;
label.Dock = DockStyle.Fill;
this.tableLayoutPanel1.Controls.Add(label);
}
this.tableLayoutPanel1.ResumeLayout();
截图:
我在 运行 期间有一个 tablelayoutpanel.And 我正在动态生成一些标签,每个标签都有一个紫色的圆形 image.Now 每个 tablelayoutpanel 内均匀填充一些 images/labels单元格,但有些是 not.Please 看图片..
顶部 2 行的标签被均匀填充,而从第 3 行开始的行有 sh运行k。为什么会这样?需要做什么才能摆脱这个问题?提前致谢。
您应该将 ColumnStyles
and RowStyles
设置为合适的值。
例如,对于每一列和每一行,您可以使用 SizeType.Percent
or SizeType.Absolute
定义样式并为它们设置一个相等的值。
在下面的例子中:
- 我将
TableLayoutPanel
的AutoSize
属性 设置为 true - 将
Form
的AutoScroll
属性 设置为真 - 使用等百分比 (
100/columnCount
) 将列样式设置为SizeType.Percent
- 使用相等值
30
将行样式设置为 - 动态添加控件。
SizeType.Absolute
示例代码:
int columnCount = 4;
int rowCount = 13;
this.tableLayoutPanel1.ColumnCount = columnCount;
this.tableLayoutPanel1.RowCount = rowCount;
this.tableLayoutPanel1.ColumnStyles.Clear();
this.tableLayoutPanel1.RowStyles.Clear();
this.tableLayoutPanel1.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
this.tableLayoutPanel1.BackColor = Color.White;
this.tableLayoutPanel1.AutoSize = true;
for (int i = 0; i < columnCount; i++)
{
this.tableLayoutPanel1.ColumnStyles.Add(
new ColumnStyle(SizeType.Percent, 100 / columnCount));
}
for (int i = 0; i < rowCount; i++)
{
this.tableLayoutPanel1.RowStyles.Add(
new RowStyle(SizeType.Absolute, 30));
}
this.tableLayoutPanel1.SuspendLayout();
for (var i = 1; i <= 50; i++)
{
var label = new Label();
label.Text = i.ToString();
label.Font = new Font(label.Font, FontStyle.Bold);
label.AutoSize = false;
label.Size = new Size(30, 30);
label.Image = Properties.Resources.Circle;
label.ImageAlign = ContentAlignment.MiddleCenter;
label.TextAlign = ContentAlignment.MiddleCenter;
label.Dock = DockStyle.Fill;
this.tableLayoutPanel1.Controls.Add(label);
}
this.tableLayoutPanel1.ResumeLayout();
截图: