You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TableLayoutPanel新增行时部分列不遵循预设固定尺寸如何解决

问题成因
  • 动态新增的控件未设置Dock = DockStyle.Fill属性,默认控件尺寸与设计器中原有行的控件尺寸不一致,TableLayoutPanel会自动调整列宽以适配单元格内控件的实际大小,导致未匹配尺寸的控件所在列(第2、4列)宽度偏离预设值。
  • 新增控件的Margin、Padding属性与原有行控件的对应属性不一致,额外的边距会占用单元格宽度,触发列宽自动重计算。
解决方案

修改新增行的事件代码,为所有动态创建的控件统一设置Dock属性为填充单元格,同时对齐Margin等属性与原有控件保持一致即可,参考修改后的代码:

private void addrowButton_Click(object sender, EventArgs e)
{
    RowStyle temp = configTLP.RowStyles[configTLP.RowCount - 1];
    configTLP.RowCount++;
    configTLP.RowStyles.Add(new RowStyle(temp.SizeType, temp.Height));
    // 新增控件统一设置Dock和边距,与原有行控件属性对齐
    var txt1 = new TextBox() { Dock = DockStyle.Fill, Margin = new Padding(3) };
    configTLP.Controls.Add(txt1, 0, configTLP.RowCount - 1);
    var txt2 = new TextBox() { Dock = DockStyle.Fill, Margin = new Padding(3) };
    configTLP.Controls.Add(txt2, 1, configTLP.RowCount - 1);
    var cbo = new ComboBox() { Dock = DockStyle.Fill, Margin = new Padding(3) };
    configTLP.Controls.Add(cbo, 2, configTLP.RowCount - 1);
    var txt3 = new TextBox() { Dock = DockStyle.Fill, Margin = new Padding(3) };
    configTLP.Controls.Add(txt3, 3, configTLP.RowCount - 1);
    var btn = new Button() { Dock = DockStyle.Fill, Margin = new Padding(3), Text = "删除" };
    configTLP.Controls.Add(btn, 4, configTLP.RowCount - 1);
}

如果设置后仍有偏差,可以额外显式将所有列的SizeType固定为SizeType.Absolute,指定固定列宽数值,彻底关闭列宽自动适配逻辑。

内容的提问来源于stack exchange,提问作者Matt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 03:27:01