Если вы отключаете AutoSize
на элементе управления, это должно быть Label
, поскольку TextBox
не имеет свойства AutoSize
. Свойство TextAlign Label
имеет тип ContentAligment, поэтому вы можете установить как горизонтальное, так и вертикальное выравнивание.
По различным скучным причинам текстовые поля в окнах предназначены для автоматической настройки их высоты в соответствии с используемым шрифтом. Чтобы контролировать высоту и центрировать текст по вертикали, вы можете быстро создать пользовательский элемент управления UserControl, которым можно заменить все текстовые поля.
На вашем пользовательском элементе управления установите BorderStyle на Fixed3D и BackColor на System.Window. Добавьте TextBox и установите для его BorderStyle значение None. В событии Resize для элемента управления добавьте код, который делает TextBox такой же ширины, как и область клиента пользовательского элемента управления (с учетом пикселей границы), и выравнивает его по левому краю (т. Е. textBox1.Left = 0;
) и центрирует его вертикально (например, textBox1.Top = (this.Height - textBox1.Height) / 2;
).
Наконец, добавьте к пользовательскому элементу управления любые свойства и события типа TextBox, которые вам нужны (вероятно, просто Text и TextChanged, я думаю), и подключите их так, чтобы они проходили через TextBox внутри вашего элемента управления, например так:
public string Text
{
get
{
return textBox1.Text;
}
set
{
textBox1.Text = value;
}
}
Если вы хотите получить сверхъестественное с этим, вы можете даже заменить свойство TextAlign вашего пользовательского элемента управления на свойство, имеющее тип ContentAlignment (например, Label), а затем выровнять внутренний TextBox, чтобы он соответствовал.
Этот же подход будет работать для ComboBox, хотя и будет выглядеть немного странно. С ComboBox вы устанавливаете его свойство FlatStyle равным Flat - в противном случае вы имеете дело с ним так же, как с TextBox. Это будет выглядеть странно, потому что поле со стрелкой раскрывающегося списка будет не совсем вверху и внизу панели.