C# WinForms вертикальное выравнивание для текстового поля и т. д

Я работаю над проектом, обновляющим их пользовательский интерфейс приложения WinForms, чтобы быть более совместимым с размерами. Элементы управления TextBox и ComboBox по умолчанию имеют разную высоту, даже с одинаковым шрифтом. Я смог изменить размер текстовых полей, отключив автозапуск, но текст по-прежнему обнимает верхнюю часть элемента управления, оставляя пробел ниже.

есть ли способ, чтобы центрировать текст по вертикали в управление?

4 ответов


если вы выключаете AutoSize на элементе управления это должно быть Label С TextBox нет AutoSize собственность. TextAlign свойство Label имеет тип ContentAligment, поэтому вы можете установить как горизонтальное, так и вертикальное выравнивание.

по разным скучным причинам текстовые поля в windows предназначены для автоматической настройки их высоты до используемого шрифта. Для управления высотой и вертикальным центром текста можно быстро создать пользовательский UserControl, который можно заменить все ваши текстовые поля.

в пользовательском элементе управления установите BorderStyle в Fixed3D, а BackColor в System.Окно. Добавьте текстовое поле и установите для его BorderStyle значение None. В событии Resize для элемента управления добавьте код, который делает текстовое поле одинаковой ширины с клиентской областью пользовательского элемента управления (с учетом пикселей границы) и выравнивает его слева (т. е. textBox1.Left = 0;) и вертикально центрирует его (например textBox1.Top = (this.Height - textBox1.Height) / 2;).

наконец, добавьте в пользовательский элемент управления любые свойства типа TextBox и события, которые вам нужны (вероятно, просто текст и TextChanged, я бы предположил), и подключите их так, чтобы они проходили в текстовое поле внутри вашего элемента управления, например:

public string Text
{
    get
    {
        return textBox1.Text;
    }
    set
    {
        textBox1.Text = value;
    }
}

если вы хотите получить супер-фантазии с этим, вы можете даже заменить свойство TextAlign вашего пользовательского элемента управления на тот, который на самом деле имеет тип ContentAlignment (например, метку), а затем выровнять внутреннее текстовое поле для соответствия.

этот же подход будет работать для ComboBox, хотя он будет выглядеть немного странный. С помощью ComboBox вы устанавливаете его свойство FlatStyle в Flat-в противном случае вы имеете дело с ним так же, как с текстовым полем. Это будет выглядеть странно, потому что выпадающее окно со стрелкой будет не совсем в верхней и нижней части панели.


немного поздно, но здесь ответ прост..

создайте пустой элемент управления и включите textbox в качестве дочернего элемента, а затем, когда родительский элемент управления или textbox resize перестроить элемент управления textbox в середине по вертикали

удалите границы, сделайте bk того же цвета, что и родительский (по умолчанию)

о, переопределите шрифт, чтобы установить шрифт textbox, и я думаю, что у вас есть текстовое поле valign.


очень простое решение-использовать Datagridview с 1 столбцом, 1 строкой, заголовками столбцов и строк, которые не видны, и установить DefaultCellStyle.Выравнивание = MiddleLeft.

и отключить добавление / удаление строк, и у вас есть текстовое поле, которое идеально выравнивает текст.


вы можете просто отрегулировать прокладку-вертикальную выше. Свойство в категории макет.