在 TableLayoutPanel 中自由调整 space

Adjust free space in a TableLayoutPanel

我有一个包含标签和组合框的 TableLayoutPanel:

var lblDesignGroup = new Label
{
    Name = "lblDesignGroup",
    Text = "DesignGroup",
    Margin = new Padding(0, 50, 0, 0)
};
tlpCallLog.Controls.Add(lblDesignGroup, 0, 0);

var cboDesignGroup = new ComboBox
{
    Name = "cboDesignGroup",
    DataSource = designGroups,
    DisplayMember = "DesignGroupName",
    ValueMember = "DesignGroupId",
    Margin = new Padding(0, 50, 0, 0),
    DropDownStyle = ComboBoxStyle.DropDownList
};

创建它们后,我将 TableLayoutPanel 设置为:

tlpCallLog.ColumnStyles.Clear();
for (int i = 0; i < tlpCallLog.ColumnCount; i++)
{
    tlpCallLog.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
}

tlpCallLog.RowStyles.Clear();
for (int i = 0; i < tlpCallLog.RowCount; i++)
{
    tlpCallLog.RowStyles.Add(new RowStyle(SizeType.AutoSize));
}
tlpCallLog.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;

但由于某种原因,我在 Label 和 DropDown 之间有空白 space。
如您所见,DropDown 宽度调整正确,它没有任何空闲 space,但 Label 有。
我想删除那个 space。我怎样才能做到这一点?

标签控件在默认布局中自动调整大小(当窗体的子项时,作为标准方案,因为窗体在初始化时执行其布局)。像这样创建时,AutoSize 属性 设置为 true 因为这是默认值,但从不执行布局。
当您显式设置 AutoSize = true 时,就会执行布局。

将 TableLayoutPanel 和 Label 都设置为自动调整大小:

tlpCallLog.AutoSize = true;
tlpCallLog.RowStyles.Clear();
//[...]

var lblDesignGroup = new Label {
    AutoSize = true,
    Name = "lblDesignGroup",
    Text = "DesignGroup",
    Margin = new Padding(0, 53, 0, 0)
};
tlpCallLog.Controls.Add(lblDesignGroup, 0, 0);

var cboDesignGroup = new ComboBox {  
    //[...]
}

我建议将 Label 的 Margin = new Padding(0, 53, 0, 0): 向下设置 3 个像素,以与 ComboBox 文本对齐。它是(几乎)任何字体大小的有效度量。

另一个建议是设置[Form].AutoScaleMode = AutoScaleMode.Dpi