c# - tablelayoutpanel 单元格未在 c# win 窗体中均匀填充

标签 c# .net winforms tablelayoutpanel

我有一个 tablelayoutpanel。在运行时我正在动态生成一些标签,每个标签都有一个紫色的圆形图像。现在一些图像/标签均匀地填充在每个 tablelayoutpanel 单元格内,但有些不是。请看图像.. enter image description here

顶部 2 行的标签被均匀填充,而从第 3 行开始的行缩小了。为什么会这样?需要做什么才能摆脱这个问题?提前致谢。

最佳答案

你应该设置ColumnStylesRowStyles到合适的值。

例如,对于每一列和每一行,您可以使用 SizeType.Percent 定义样式或 SizeType.Absolute并为它们设置一个相等的值。

在下面的例子中:

  • 我将 TableLayoutPanelAutoSize 属性设置为 true
  • FormAutoScroll 属性设置为 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();

截图:

enter image description here

关于c# - tablelayoutpanel 单元格未在 c# win 窗体中均匀填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34478730/

相关文章:

c# - 格式化包含数字/日期的字符串变量以在 C# 中打印

c# - 启动任务和获取返回值的更好模式

c# - 有没有办法对事件进行断言?

c# - 来自 SQLCLR 的异步 API 调用中的问题

winforms - 使用 Entity Framework 作为 ORM 的 Winform 应用程序的 MVC 或 MVP 架构

c# - Linq:分组依据,根据变量(例如枚举)对结果进行不同的分组

.net - 创建新 GUI 时,WPF 是不是 Windows 窗体的首选?

c# - 如何使用每个 C# 智能技术将项目从其他列表添加到列表中

c# - 父控件鼠标进入/离开事件与子控件

c# - 禁用 ToolStripMenuItem 与禁用 MenuStrip.Item