Risposte:
Impostare Label
la AutoSize
proprietà su False
, la TextAlign
proprietà su MiddleCenter
e la Dock
proprietà su Fill
.
Control.Dock
proprietà ( msdn.microsoft.com/en-us/library/… ), è possibile ancorare (incollare) un controllo su un determinato lato del contenitore. Per esempio Left
, Top
, Right
o Bottom
. Fill
indica al controllo di occupare tutto lo spazio disponibile nel contenitore.
Dock
impostazione.
Dock
l'impostazione non era necessaria. La modifica della AutoSize
proprietà 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:
BackColor
impostato tale impostazione AutoSize = false
e Dock = Fill
fa sì che il colore di sfondo riempia l'intero moduloAutoSize
impostare 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