2014-12-22 28 views
5

Devo mostrare un modulo con un'etichetta centrata (in base alla larghezza del modulo e al testo dell'etichetta, alla larghezza, alla famiglia di caratteri e alle dimensioni del carattere). Questo stato il mio tentativo finora:Centra un'etichetta su qualsiasi modulo VB.NET

Non importa quanto mi sforzi, l'etichetta non sembra centrato come dovrebbe (lati sinistro e destro dell'etichetta non sembrano avere la stessa dimensione).

C'è un altro modo per misurare il testo indipendentemente dal tipo di carattere utilizzato? Grazie.

+0

Questa equazione non ti darà nulla che sappia che è equidistante dai bordi della forma. È necessario posizionare il punto centrale dell'etichetta in Form1.Width/2. – Mathemats

risposta

12

Impostare la proprietà Autosize dell'etichetta su False, allora o Dock Top Label, basso o riempire, o trascinarlo alla larghezza del modulo e impostare Anchor sia per destra e sinistra. Quindi impostare TextAlign su MiddleCenter.

La proprietà Anchor è piuttosto carina, perché in pratica mette il bordo di un controllo sul rispettivo lato del modulo.
Quindi nel nostro caso il lato sinistro del controllo si blocca sul lato sinistro del modulo e il lato destro rimane sul lato destro del modulo.
Quindi, se il modulo viene ridimensionato, trascina il lato sinistro e destro del controllo con esso. Insieme allo TextAlign, questo mantiene sempre il testo al centro.
Affinché questo funzioni, è necessario disabilitare la funzionalità AutoSize dell'etichetta.

Un modo alternativo sarebbe quello di mantenere AutoSize abilitato, il centro della forma sul controllo, e quindi disabilitare sia destra e sinistra Anchor. Ciò manterrebbe centrata anche l'etichetta, poiché ora non si attacca più ai lati ma mantiene la posizione relativa.

Quindi: lascia che il controllo esegua il lavoro per te.

enter image description here

+1

Ora è centrato correttamente! Grazie! – soulblazer

+2

Prego. Ho aggiunto anche qualche spiegazione aggiuntiva. – Jens

2

Ecco una soluzione più professionale:

centratura orizzontale:

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

centratura verticale:

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

aggiungere questo codice sul gestore myLabel.[SizeChanged][1] evento così come sul suo genitore SizeChanged Event handler

p.s. non aggiungere la codeline prima che venga chiamato il metodo InitializeComponent() o prima che il controllo sia collegato a un controllo padre.