C # WinForms Вертикальное выравнивание для TextBox и т. Д. - PullRequest
6 голосов
/ 16 апреля 2010

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

Есть ли способ отцентрировать текст по вертикали в элементе управления?

Ответы [ 4 ]

7 голосов
/ 16 апреля 2010

Если вы отключаете 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. Это будет выглядеть странно, потому что поле со стрелкой раскрывающегося списка будет не совсем вверху и внизу панели.

1 голос
/ 07 апреля 2014

немного поздно, но здесь легкий ответ ..

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

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

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

0 голосов
/ 02 апреля 2018

Вы можете просто настроить отступ - по вертикали выше. Недвижимость в разметке категории.

0 голосов
/ 01 июля 2017

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...