Ответы:
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
};
Dockstyle и Content выравнивание могут отличаться от ваших потребностей. Например, для простой метки в форме wpf я использую DockStyle.None.
Вы достигнете этого, установив свойство Anchor: None.
Если вы не хотите закреплять метку во всей доступной области, просто установите событие SizeChanged вместо TextChanged. Изменение каждой буквы приведет к изменению свойства ширины метки и ее текста, если для свойства autosize установлено значение 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;
}
Это действительно центр