Відповіді:
Set Label«s AutoSizeвластивість False, TextAlignвластивість MiddleCenterі Dockвластивість Fill.
Control.Dockвластивості ( msdn.microsoft.com/en-us/library/… ) ви можете приєднати (приклеїти) елемент керування до певної сторони контейнера. Так , наприклад Left, Top, Rightабо Bottom. Fillповідомляє елементу управління зайняти все наявне місце в контейнері.
Dockналаштування.
Dockналаштування було непотрібне. Зміна AutoSizeвластивості дає мітці обмежувальне поле, яким ви можете вручну відрегулювати розмір.
Дещо незначного додаткового вмісту для налаштування програмно:
Label textLabel = new Label() {
AutoSize = false,
TextAlign = ContentAlignment.MiddleCenter,
Dock = DockStyle.None,
Left = 10,
Width = myDialog.Width - 10
};
Вирівнювання стилю та вмісту може відрізнятися від ваших потреб. Наприклад, для простої мітки у формі wpf я використовую DockStyle.None.
Ви досягнете цього параметра, встановивши властивість Якір: Ні.
Якщо ви не хочете стикувати ярлик у всій доступній області, просто встановіть події SizeChanged замість TextChanged. Зміна кожної літери змінить властивість ширини мітки, а також її тексту, коли властивість автоматичного розміру встановлено на True. Тож, до речі, ви можете використовувати будь-яку формулу, щоб зберегти мітку в центрі форми.
private void lblReport_SizeChanged(object sender, EventArgs e)
{
lblReport.Left = (this.ClientSize.Width - lblReport.Size.Width) / 2;
}
Прийнята відповідь не спрацювала для мене з двох причин:
BackColorвстановив таке налаштування AutoSize = falseі Dock = Fillзмушує колір фону заповнити всю формуAutoSizeвстановити значення false, тому що мій текст мітки був динамічнимНатомість я просто використав ширину форми та ширину мітки для обчислення лівого зміщення:
MyLabel.Left = (this.Width - MyLabel.Width) / 2;
Я хотів зробити щось подібне, але на формі з фоновим зображенням я виявив, що коли текст на мітці змінив перефарбування, було очевидним за допомогою цього методу, тому я зробив наступне: * Встановіть мітку AutoSize на true та TextAlign на MiddleCenter
Потім, кожного разу, коли текст змінювався (мій робився за допомогою таймера), я викликав такий метод:
private Point GetPosition()
{
int y = (this.Height / 2) - (label1.Height / 2);
int x = (this.Width / 2) - (label1.Width / 2);
return new Point(x, y);
}
І встановіть властивість Location мітки на це повернене значення. Це гарантувало, що етикетка завжди знаходилася в центрі форми, коли текст змінювався, а перефарбовування для форми на весь екран не було очевидним.
Ви можете спробувати наступний фрагмент коду:
private Point CenterOfMenuPanel<T>(T control, int height=0) where T:Control {
Point center = new Point(
MenuPanel.Size.Width / 2 - control.Width * 2,
height != 0 ? height : MenuPanel.Size.Height / 2 - control.Height / 2);
return center;
}
Це дійсно центр
