Come posso mantenere un'etichetta centrata in WinForms?


137

In WinFormsSto usando una Labelper visualizzare i messaggi diversi, come il successo, il fallimento, ecc

Vorrei centrare quell'etichetta nella forma centrale. Voglio una soluzione che la mantenga centrata se c'è solo una parola o un'intera frase nell'etichetta.

Risposte:


281

Impostare Labella AutoSizeproprietà su False, la TextAlignproprietà su MiddleCentere la Dockproprietà su Fill.


grazie deciclone, ha funzionato. puoi guidare cosa fa Dock?
Haansi,

3
Con la Control.Dockproprietà ( msdn.microsoft.com/en-us/library/… ), è possibile ancorare (incollare) un controllo su un determinato lato del contenitore. Per esempio Left, Top, Righto Bottom. Fillindica al controllo di occupare tutto lo spazio disponibile nel contenitore.
deciclone

1
A meno che non si desideri che l'etichetta riempia l'intero spazio disponibile, è possibile impostare la proprietà Dock su "Nessuno", come suggerito dall'utente3866622 nella sua soluzione programmatica.
Tim

3
Ha funzionato, ma non ho dovuto fare nulla per l' Dockimpostazione.
Jim Fell,

4
Dockl'impostazione non era necessaria. La modifica della AutoSizeproprietà conferisce all'etichetta un rettangolo di selezione di cui è possibile regolare manualmente la dimensione.
Nick Roberts,

13

Alcuni contenuti aggiuntivi minori per l'impostazione a livello di codice:

Label textLabel = new Label() { 
        AutoSize = false, 
        TextAlign = ContentAlignment.MiddleCenter, 
        Dock = DockStyle.None, 
        Left = 10, 
        Width = myDialog.Width - 10
};            

Dockstyle e allineamento dei contenuti possono differire dalle tue esigenze. Ad esempio, per una semplice etichetta su un modulo wpf uso DockStyle.None.



10

Se non desideri ancorare l'etichetta in tutta l'area disponibile, imposta l'evento SizeChanged anziché TextChanged. La modifica di ogni lettera modificherà la proprietà larghezza dell'etichetta e il suo testo quando la proprietà di ridimensionamento automatico è impostata su Vero. Quindi, a proposito, puoi usare qualsiasi formula per mantenere l'etichetta centrata nella forma.

private void lblReport_SizeChanged(object sender, EventArgs e)
{
    lblReport.Left = (this.ClientSize.Width - lblReport.Size.Width) / 2;
}

2

La risposta accettata non ha funzionato per me per due motivi:

  1. Avevo BackColorimpostato tale impostazione AutoSize = falsee Dock = Fillfa sì che il colore di sfondo riempia l'intero modulo
  2. Non avrei potuto AutoSizeimpostare su false comunque perché il testo dell'etichetta era dinamico

Invece, ho semplicemente usato la larghezza del modulo e la larghezza dell'etichetta per calcolare l'offset sinistro:

MyLabel.Left = (this.Width - MyLabel.Width) / 2;

1

Volevo fare qualcosa di simile, ma su un modulo con un'immagine di sfondo, ho scoperto che quando il testo nell'etichetta cambiava le ridisegni erano ovvie con questo metodo, quindi ho fatto quanto segue: * Impostare l'etichetta AutoSize su true e TextAlign su MiddleCenter

Quindi, ogni volta che il testo cambiava (il mio veniva fatto usando un timer) chiamavo il seguente metodo:

    private Point GetPosition()
    {
        int y = (this.Height / 2) - (label1.Height / 2);
        int x = (this.Width / 2) - (label1.Width / 2);
        return new Point(x, y);
    }

E imposta la proprietà Location dell'etichetta su questo valore di ritorno. Ciò ha garantito che l'etichetta fosse sempre al centro del modulo quando il testo cambiava e le ridisegni per un modulo a schermo intero non erano evidenti.


1

Puoi provare il seguente frammento di codice:

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

È davvero il centro

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.