Ответ 1
Задайте для свойства Label
AutoSize
свойство False
, TextAlign
свойство MiddleCenter
и Dock
для Fill
.
В WinForms
Я использую Label
для отображения различных сообщений, таких как успех, сбой и т.д.
Я хотел бы сосредоточить этот ярлык в центральной форме. Я хочу решение, которое будет поддерживать его в центре, есть ли только одно слово или целое предложение в ярлыке.
Задайте для свойства Label
AutoSize
свойство False
, TextAlign
свойство MiddleCenter
и Dock
для Fill
.
Вы получите его с настройкой свойства Якорь: Нет.
Некорректный дополнительный контент для программной настройки:
Label textLabel = new Label() {
AutoSize = false,
TextAlign = ContentAlignment.MiddleCenter,
Dock = DockStyle.None,
Left = 10,
Width = myDialog.Width - 10
};
Докстайл и выравнивание контента могут отличаться от ваших потребностей. Например, для простой метки в форме wpf я использую DockStyle.None.
Если вы не хотите прикреплять ярлык во всей доступной области, просто установите событие SizeChanged вместо TextChanged. Изменение каждой буквы изменит свойство ширины метки, а также ее текст, если свойство autosize установлено на True. Таким образом, кстати, вы можете использовать любую формулу, чтобы держать метку в центре.
private void lblReport_SizeChanged(object sender, EventArgs e)
{
lblReport.Left = (this.ClientSize.Width - lblReport.Size.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 это возвращаемое значение. Это гарантировало, что метка всегда была в центре формы, когда текст изменялся, и перерисовки для полноэкранной формы не были очевидны.
Принятый ответ не работает для меня по двум причинам:
BackColor
, поэтому настройка AutoSize = false
и Dock = Fill
заставляет цвет фона заполнить всю формуAutoSize
на false в любом случае, потому что текст моей метки был динамическимВместо этого я просто использовал ширину формы и ширину метки для вычисления смещения влево:
MyLabel.Left = (this.Width - MyLabel.Width) / 2;
Вы можете попробовать следующий фрагмент кода:
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;
}
Это действительно центр