Esta es mi solución , utilizando un TableLayoutPanel
para colocar la etiqueta y el control de entrada,
presetted algunas propiedades útiles: tamaño
- Auto etiqueta por contenido
- etiqueta superior margen de vertical-align: medio como estilo
- Fill permanecen espacio por control de entrada
de vista previa

El código puede necesitar más envuelva
internal class TextBoxField : TableLayoutPanel
{
private readonly TextBox _textBox;
public string Text
{
get => _textBox.Text;
set => _textBox.Text = value;
}
public TextBoxField(string labelText)
{
var label = new Label { Text = labelText, AutoSize = true };
var labelMargin = label.Margin;
labelMargin.Top = 8;
label.Margin = labelMargin;
_textBox = new TextBox { Dock = DockStyle.Fill };
AutoSize = true;
ColumnCount = 2;
RowCount = 1;
ColumnStyles.Add(new ColumnStyle());
ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
RowStyles.Add(new RowStyle());
Controls.Add(label, 0, 0);
Controls.Add(_textBox, 1, 0);
}
}
internal class DateTimePickerField : TableLayoutPanel
{
private readonly DateTimePicker _dateTimePicker;
public DateTime Value
{
get => _dateTimePicker.Value;
set => _dateTimePicker.Value = value;
}
public DateTimePickerField(string labelText)
{
var label = new Label { Text = labelText, AutoSize = true };
var labelMargin = label.Margin;
labelMargin.Top = 8;
label.Margin = labelMargin;
_dateTimePicker = new DateTimePicker { Dock = DockStyle.Fill };
AutoSize = true;
ColumnCount = 2;
RowCount = 1;
ColumnStyles.Add(new ColumnStyle());
ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
RowStyles.Add(new RowStyle());
Controls.Add(label, 0, 0);
Controls.Add(_dateTimePicker, 1, 0);
}
}
Uso:
var frm = new Form
{
AutoSize = true,
StartPosition = FormStartPosition.CenterParent,
Text = "Assoc Device",
};
var txtGpsCode = new TextBoxField("GpsCode") { Dock = DockStyle.Bottom, TabIndex = 1 };
var dtp = new DateTimePickerField("Expire date") { Dock = DockStyle.Bottom, TabIndex = 2 };
var button = new Button { Text = "OK", DialogResult = DialogResult.OK, Dock = DockStyle.Bottom };
frm.Controls.Add(txtGpsCode);
frm.Controls.Add(dtp);
frm.Controls.Add(button);
frm.AcceptButton = button;
frm.Height = 0;
frm.ShowDialog();
Con el "control de campo" en el acceso, al hacer clic en la etiqueta se da el foco al cuadro de texto vinculado. También podría, en modo de diseño, mover libremente ambos controles (etiqueta y cuadro de texto). No voy a decir que este es un ejemplo de competencia ... –
@DangerZone: puedes jugar con los paneles y el acoplamiento para que el cuadro de texto llene el control del usuario. – user5226582