我有一个 tablelayoutpanel。在运行时我正在动态生成一些标签,每个标签都有一个紫色的圆形图像。现在一些图像/标签均匀地填充在每个 tablelayoutpanel 单元格内,但有些不是。请看图像..
顶部 2 行的标签被均匀填充,而从第 3 行开始的行缩小了。为什么会这样?需要做什么才能摆脱这个问题?提前致谢。
最佳答案
你应该设置ColumnStyles
和 RowStyles
到合适的值。
例如,对于每一列和每一行,您可以使用 SizeType.Percent
定义样式或 SizeType.Absolute
并为它们设置一个相等的值。
在下面的例子中:
- 我将
TableLayoutPanel
的AutoSize
属性设置为 true - 将
Form
的AutoScroll
属性设置为 true - 使用等百分比 (
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();
截图:
关于c# - tablelayoutpanel 单元格未在 c# win 窗体中均匀填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34478730/