2014-12-22 14 views
5

Ich muss ein Formular mit einem zentrierten Etikett anzeigen (je nach Breite und Beschriftung des Textes, Breite, Schriftfamilie und Schriftgröße). Dies habe meinen Versuch bisher:Zentrieren Sie ein Etikett in einem beliebigen Formular. VB.NET

Egal, wie viel ich versuche, ist das Etikett nicht zentriert erscheinen, wie es (Label der linken und rechten Seite gleich groß zu sein scheinen nicht) sollte.

Gibt es eine andere Möglichkeit, Text zu messen, egal welche Schriftart verwendet wird? Vielen Dank.

+0

Diese Gleichung wird Ihnen nichts geben, was weiß, dass sie von den Rändern der Form gleich weit entfernt ist. Sie müssen den Etikettenmittelpunkt bei Form1.Width/2 platzieren. – Mathemats

Antwort

12

Stellen Sie die Autosize Eigenschaft Ihres Etiketts auf False, dann entweder Dock das Label oben, unten oder Fill, oder es auf die volle Breite der Form ziehen und setzen Anchor sowohl nach links und rechts. Stellen Sie dann TextAlign auf MiddleCenter ein.

Die Anchor Eigenschaft ist ziemlich raffiniert, weil sie im Grunde die a-Grenze eines Steuerelements an die jeweilige Seite des Formulars anpinnt.
In unserem Fall klebt also die linke Seite des Steuerelements an der linken Seite des Formulars und die rechte Seite an der rechten Seite des Formulars.
Wenn also die Größe des Formulars geändert wird, zieht es die linke und rechte Seite des Steuerelements mit sich. Zusammen mit der TextAlign hält dies immer den Text zentriert.
Damit dies funktioniert, muss die AutoSize Funktionalität des Etiketts deaktiviert werden.

Eine alternative Möglichkeit wäre AutoSize zu halten aktiviert, in der Mitte das Formular auf der Steuerung, und dann disable den linken und rechten Anchor. Dies würde das Etikett auch zentriert halten, da es nun nicht mehr auf beiden Seiten klebt, sondern seine relative Position beibehält.

Also: Lassen Sie die Kontrolle die Arbeit für Sie erledigen.

enter image description here

+1

Jetzt ist es richtig zentriert! Vielen Dank! – soulblazer

+2

Gern geschehen. Ich fügte einige zusätzliche Erklärungen hinzu. – Jens

2

Hier ist eine professionelle Lösung:

horizontale Zentrierung:

myLabel.Left = (myLabel.Parent.Width \2) - (myLabel.Width \2) 

vertikale Zentrierung:

myLabel.Top = (myLabel.Parent.Height \ 2) - (myLabel.Height \ 2) 

diesen Code auf der auch myLabel.[SizeChanged][1] Eventhandler hinzufügen wie auf seinem Elternteil SizeChanged Ereignisbehandler

p.s. Fügen Sie die Codelinie nicht hinzu, bevor die Methode InitializeComponent() aufgerufen wird oder bevor das Steuerelement einem übergeordneten Steuerelement zugeordnet wird.

Verwandte Themen