Центрируйте метку в любой форме VB.NET

Мне нужно показать форму с центрированной меткой (в соответствии с шириной формы и текстом метки, шириной, семейством шрифтов и размером шрифта). До сих пор это была моя попытка:

(Me.Width - TextRenderer.MeasureText("Hello word", New Font("Delius", 10, 
FontStyle.Regular).Width) / 2

Независимо от того, сколько я стараюсь, ярлык не отображается по центру, как это должно быть (левая и правая стороны ярлыка не выглядят одинакового размера).

Есть ли другой способ измерения текста независимо от того, какой шрифт используется? Спасибо.

2 ответа

Решение

Установить Autosize свойство вашего ярлыка в False, то либо Dock метка Top, Bottom или Fill, или перетащите его на всю ширину формы и установите Anchor как слева, так и справа. Затем установите TextAlign в MiddleCenter.

Anchor свойство довольно изящно, потому что оно в основном прикрепляет границу элемента управления к соответствующей стороне формы.
Таким образом, в нашем случае левая сторона элемента управления прилипает к левой стороне формы, а правая часть - к правой стороне формы.
Таким образом, если размер формы изменяется, он перетаскивает левую и правую часть элемента управления вместе с ним. Вместе с TextAlign, это всегда держит текст по центру.
Чтобы это работало, AutoSize Функциональность ярлыка должна быть отключена.

Альтернативным способом было бы сохранить AutoSize включен, центр формы на элементе управления, а затем отключите как левый и правый Anchor, Это также будет держать метку по центру, так как теперь она больше не прилипает ни к одной из сторон, а сохраняет свое относительное положение.

Итак: пусть контроль сделает всю работу за вас.

Вот более профессиональное решение:

горизонтальное центрирование:

 myLabel.Left = (myLabel.Parent.Width \2) - (myLabel.Width \2)

вертикальное центрирование:

myLabel.Top = (myLabel.Parent.Height \ 2) - (myLabel.Height \ 2)

добавить этот код на myLabel.[SizeChanged][1] Обработчик событий, а также его родитель SizeChanged Обработчик события

ps не добавляйте кодовую строку перед InitializeComponent() Метод вызывается или до того, как элемент управления будет присоединен к родительскому элементу управления.

Другие вопросы по тегам