は、これが私の解決策ですTableLayoutPanel
を使用してラベルと入力コントロールを配置し、
Presettedいくつかの有用な特性:
- 垂直整列のためのコンテンツ
- ラベルマージントップによって自動サイズのラベル:スタイルのようなミドル
- 塗りつぶしが入力制御
プレビューでスペースをまま
コードはさらに
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);
}
}
Useageラップが必要な場合があり
:アクセスの「フィールドコントロール」で
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();
を使用すると、ラベルをクリックすると、フォーカスがリンクされたテキストボックスに与えられています。デザインモードでも、両方のコントロール(ラベルとテキストボックス)を自由に動かすことができます。私はこれが競争の例であるとは言いません... –
@DangerZone - あなたはパネルでドッキングして、テキストボックスをユーザーコントロールに塗りつぶすことができます。 – user5226582