Antworten:
Setzen Sie Labeldie AutoSizeEigenschaft auf False, TextAlignEigenschaft auf MiddleCenterund DockEigenschaft auf Fill.
Control.DockEigenschaft ( msdn.microsoft.com/en-us/library/… ) können Sie ein Steuerelement an eine bestimmte Seite des Containers andocken (kleben). Zum Beispiel Left, Top, Rightoder Bottom. FillWeist das Steuerelement an, den gesamten verfügbaren Speicherplatz im Container zu belegen.
DockEinstellung ändern.
DockEinstellung war unnötig. Durch Ändern der AutoSizeEigenschaft erhält die Beschriftung einen Begrenzungsrahmen, dessen Größe Sie manuell anpassen können.
Einige kleinere zusätzliche Inhalte zum programmgesteuerten Einstellen:
Label textLabel = new Label() {
AutoSize = false,
TextAlign = ContentAlignment.MiddleCenter,
Dock = DockStyle.None,
Left = 10,
Width = myDialog.Width - 10
};
Die Ausrichtung von Dockstil und Inhalt kann von Ihren Anforderungen abweichen. Zum Beispiel verwende ich für eine einfache Beschriftung in einem wpf-Formular DockStyle.None.
Sie erreichen es mit der Einstellungseigenschaft Anchor: None.
Wenn Sie die Beschriftung nicht im gesamten verfügbaren Bereich andocken möchten, legen Sie einfach das SizeChanged-Ereignis anstelle von TextChanged fest. Durch Ändern jedes Buchstabens werden die width-Eigenschaft des Etiketts sowie sein Text geändert, wenn die automatische Größeneigenschaft auf True gesetzt wird. Übrigens können Sie jede Formel verwenden, um die Beschriftung in der Form zentriert zu halten.
private void lblReport_SizeChanged(object sender, EventArgs e)
{
lblReport.Left = (this.ClientSize.Width - lblReport.Size.Width) / 2;
}
Die akzeptierte Antwort hat bei mir aus zwei Gründen nicht funktioniert:
BackColorso eingestellt AutoSize = falseundDock = Fill bewirkt, dass die Hintergrundfarbe das gesamte Formular ausfülltAutoSizesowieso nicht auf false setzen können, da mein Beschriftungstext dynamisch warStattdessen habe ich einfach die Breite des Formulars und die Breite des Etiketts verwendet, um den linken Versatz zu berechnen:
MyLabel.Left = (this.Width - MyLabel.Width) / 2;
Ich wollte etwas Ähnliches tun, aber in einem Formular mit einem Hintergrundbild stellte ich fest, dass beim Ändern des Textes in der Beschriftung die Neulackierungen bei dieser Methode offensichtlich waren. Daher habe ich Folgendes getan: * Setzen Sie die Beschriftung AutoSize auf true und TextAlign auf MiddleCenter
Jedes Mal, wenn sich der Text änderte (meiner wurde mit einem Timer erstellt), rief ich die folgende Methode auf:
private Point GetPosition()
{
int y = (this.Height / 2) - (label1.Height / 2);
int x = (this.Width / 2) - (label1.Width / 2);
return new Point(x, y);
}
Setzen Sie die Location-Eigenschaft des Labels auf diesen Rückgabewert. Dies stellte sicher, dass sich die Beschriftung immer in der Mitte des Formulars befand, wenn sich der Text änderte und die Neulackierungen für ein Vollbildformular nicht offensichtlich waren.
Sie können das folgende Code-Snippet ausprobieren:
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;
}
Es ist wirklich Zentrum
