Risposte:
Impostare Labella AutoSizeproprietà su False, la TextAlignproprietà su MiddleCentere la Dockproprietà su Fill.
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.
Dockimpostazione.
Dockl'impostazione non era necessaria. La modifica della AutoSizeproprietà conferisce all'etichetta un rettangolo di selezione di cui è possibile regolare manualmente la dimensione.
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.
Lo raggiungerai con l'impostazione della proprietà Anchor: None.
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;
}
La risposta accettata non ha funzionato per me per due motivi:
BackColorimpostato tale impostazione AutoSize = falsee Dock = Fillfa sì che il colore di sfondo riempia l'intero moduloAutoSizeimpostare su false comunque perché il testo dell'etichetta era dinamicoInvece, ho semplicemente usato la larghezza del modulo e la larghezza dell'etichetta per calcolare l'offset sinistro:
MyLabel.Left = (this.Width - MyLabel.Width) / 2;
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.
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
