Odpowiedzi:
Zestaw Label
jest AutoSize
nieruchomość do False
, TextAlign
właściwość do MiddleCenter
i Dock
właściwość do Fill
.
Control.Dock
właściwości ( msdn.microsoft.com/en-us/library/… ) można zadokować (przykleić) kontrolkę do określonej strony kontenera. Na przykład Left
, Top
, Right
lub Bottom
. Fill
informuje układ sterujący, aby zajął całe dostępne miejsce w kontenerze.
Dock
ustawieniem.
Dock
ustawienie było niepotrzebne. Zmiana AutoSize
właściwości nadaje etykiecie obwiednię, której rozmiar można ręcznie dostosować.
Drobna dodatkowa zawartość do ustawiania programowego:
Label textLabel = new Label() {
AutoSize = false,
TextAlign = ContentAlignment.MiddleCenter,
Dock = DockStyle.None,
Left = 10,
Width = myDialog.Width - 10
};
Styl dokowania i wyrównanie zawartości mogą różnić się od Twoich potrzeb. Na przykład dla prostej etykiety w formularzu wpf używam DockStyle.None.
Osiągniesz to ustawiając właściwość Anchor: None.
Jeśli nie chcesz zadokować etykiety w całym dostępnym obszarze, po prostu ustaw zdarzenie SizeChanged zamiast TextChanged. Zmiana każdej litery spowoduje zmianę właściwości szerokości etykiety, a także jej tekstu, gdy właściwość automatycznego rozmiaru jest ustawiona na True. Tak więc, przy okazji, możesz użyć dowolnej formuły, aby zachować wyśrodkowanie etykiety w formie.
private void lblReport_SizeChanged(object sender, EventArgs e)
{
lblReport.Left = (this.ClientSize.Width - lblReport.Size.Width) / 2;
}
Zaakceptowana odpowiedź nie zadziałała dla mnie z dwóch powodów:
BackColor
tak ustawiony, ustawienia AutoSize = false
i Dock = Fill
powoduje, że kolor tła, aby wypełnić cały formularzAutoSize
ustawić na fałsz, ponieważ tekst mojej etykiety był dynamicznyZamiast tego po prostu użyłem szerokości formularza i szerokości etykiety do obliczenia lewego przesunięcia:
MyLabel.Left = (this.Width - MyLabel.Width) / 2;
Chciałem zrobić coś podobnego, ale na formularzu z obrazem w tle stwierdziłem, że kiedy tekst na etykiecie zmienił się, przemalowania były oczywiste tą metodą, więc zrobiłem co następuje: * Ustaw etykietę AutoSize na true i TextAlign na MiddleCenter
Następnie za każdym razem, gdy tekst się zmieniał (mój był robiony za pomocą timera), wywołałem następującą metodę:
private Point GetPosition()
{
int y = (this.Height / 2) - (label1.Height / 2);
int x = (this.Width / 2) - (label1.Width / 2);
return new Point(x, y);
}
I ustaw właściwość Location etykiety na tę zwracaną wartość. Zapewniło to, że etykieta zawsze znajdowała się w środku formularza, gdy tekst się zmieniał, a przemalowanie w formie pełnoekranowej nie było oczywiste.
Możesz wypróbować następujący fragment kodu:
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;
}
To naprawdę centrum