Antworten:
Setzen Sie Label
die AutoSize
Eigenschaft auf False
, TextAlign
Eigenschaft auf MiddleCenter
und Dock
Eigenschaft auf Fill
.
Control.Dock
Eigenschaft ( msdn.microsoft.com/en-us/library/… ) können Sie ein Steuerelement an eine bestimmte Seite des Containers andocken (kleben). Zum Beispiel Left
, Top
, Right
oder Bottom
. Fill
Weist das Steuerelement an, den gesamten verfügbaren Speicherplatz im Container zu belegen.
Dock
Einstellung ändern.
Dock
Einstellung war unnötig. Durch Ändern der AutoSize
Eigenschaft 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:
BackColor
so eingestellt AutoSize = false
undDock = Fill
bewirkt, dass die Hintergrundfarbe das gesamte Formular ausfülltAutoSize
sowieso 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