2014-12-22 3 views
5

Мне нужно показать форму с центрированной меткой (в соответствии с шириной и текстом метки, шириной, семейством шрифтов и размером шрифта). Это была моя попытка до сих пор:Центрируйте метку в любой форме VB.NET

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

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

+0

Это уравнение не даст вам ничего, что знает, что оно равноудалено от краев формы. Вам нужно поместить метку центральной точки в Form1.Width/2. – Mathemats

ответ

12

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

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

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

Итак: пусть контроль выполнит для вас работу.

enter image description here

+1

Теперь это правильно сосредоточено! Спасибо! – soulblazer

+2

Добро пожаловать. Я также добавил некоторые дополнительные объяснения. – Jens

2

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

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

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

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

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

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

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