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
相关产品推荐
相关产品推荐

