在 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
。
我有一个包含标签和组合框的 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
。