it-swarm.com.de

Wie halte ich ein Etikett in WinForms zentriert?

In WinForms verwende ich ein Label, um verschiedene Meldungen wie Erfolg, Misserfolg usw. anzuzeigen.

Ich möchte dieses Etikett im mittleren Formular zentrieren. Ich möchte eine Lösung, die es zentriert hält, ob es nur ein Wort oder einen ganzen Satz im Etikett gibt.

126
haansi

Setzen Sie die Eigenschaft Label für AutoSize auf False, TextAlign auf MiddleCenter und Dock auf Fill.

243
decyclone

Sie erreichen dies durch Setzen der Eigenschaft Anchor: None.

13

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
};            

Dockstyle und Content Alignment können von Ihren Anforderungen abweichen. Zum Beispiel verwende ich für ein einfaches Etikett in einem WPF-Formular DockStyle.None.

12
user3866622

Wenn Sie die Beschriftung nicht im gesamten verfügbaren Bereich andocken möchten, legen Sie einfach das SizeChanged-Ereignis anstelle von TextChanged fest. Wenn Sie die einzelnen Buchstaben ändern, werden die width -Eigenschaft von label sowie der zugehörige Text geändert, wenn die Eigenschaft für die automatische Größe auf True festgelegt ist. Ü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;
}
8
Umut OVECOGLU

Ich wollte etwas Ähnliches tun, aber auf einem Formular mit einem Hintergrundbild stellte ich fest, dass bei einer Änderung des Textes im Etikett die Neufarben bei dieser Methode offensichtlich waren. Deshalb habe ich Folgendes getan: * Setzen Sie das Etikett 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. Auf diese Weise wurde sichergestellt, dass sich die Beschriftung immer in der Mitte des Formulars befand, wenn sich der Text änderte und die Überarbeitungen für ein Vollbild-Formular nicht offensichtlich waren.

0
LordPupazz

Die akzeptierte Antwort hat aus zwei Gründen bei mir nicht funktioniert:

  1. Ich hatte BackColor so eingestellt AutoSize = false und Dock = Fill bewirkt, dass die Hintergrundfarbe das gesamte Formular ausfüllt
  2. Ich konnte AutoSize sowieso nicht auf false setzen, da mein Etikettentext dynamisch war

Stattdessen 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;
0
TheIronCheek