Réponses:
Définissez Label
la AutoSize
propriété de sur False
, la TextAlign
propriété sur MiddleCenter
et la Dock
propriété sur Fill
.
Control.Dock
propriété ( msdn.microsoft.com/en-us/library/… ), vous pouvez ancrer (coller) un contrôle à un certain côté du conteneur. Par exemple Left
, Top
, Right
ou Bottom
. Fill
indique au contrôle de prendre tout l'espace disponible dans le conteneur.
Dock
décor.
Dock
le réglage était inutile. La modification de la AutoSize
propriété donne à l'étiquette un cadre de délimitation dont vous pouvez ajuster manuellement la taille.
Quelques contenus supplémentaires mineurs à définir par programmation:
Label textLabel = new Label() {
AutoSize = false,
TextAlign = ContentAlignment.MiddleCenter,
Dock = DockStyle.None,
Left = 10,
Width = myDialog.Width - 10
};
Le style d'ancrage et l'alignement du contenu peuvent différer de vos besoins. Par exemple, pour une étiquette simple sur un formulaire wpf, j'utilise DockStyle.None.
Vous l'obtiendrez avec la propriété Anchor: None.
Si vous ne souhaitez pas ancrer l'étiquette dans toute la zone disponible, définissez simplement l'événement SizeChanged au lieu de TextChanged. La modification de chaque lettre modifie la propriété width de l'étiquette ainsi que son texte lorsque la propriété de taille automatique est définie sur True. Donc, en passant, vous pouvez utiliser n'importe quelle formule pour garder l'étiquette centrée dans le formulaire.
private void lblReport_SizeChanged(object sender, EventArgs e)
{
lblReport.Left = (this.ClientSize.Width - lblReport.Size.Width) / 2;
}
La réponse acceptée n'a pas fonctionné pour moi pour deux raisons:
BackColor
défini ce paramètre AutoSize = false
et Dock = Fill
fait que la couleur d'arrière-plan remplisse tout le formulaireAutoSize
définir la valeur false car le texte de mon étiquette était dynamiqueAu lieu de cela, j'ai simplement utilisé la largeur du formulaire et la largeur de l'étiquette pour calculer le décalage gauche:
MyLabel.Left = (this.Width - MyLabel.Width) / 2;
Je voulais faire quelque chose de similaire, mais sur un formulaire avec une image d'arrière-plan, j'ai trouvé que lorsque le texte de l'étiquette changeait, les repeints étaient évidents avec cette méthode, j'ai donc fait ce qui suit: * Définissez l'étiquette AutoSize sur true et TextAlign sur MiddleCenter
Ensuite, chaque fois que le texte a changé (le mien a été fait à l'aide d'une minuterie), j'ai appelé la méthode suivante:
private Point GetPosition()
{
int y = (this.Height / 2) - (label1.Height / 2);
int x = (this.Width / 2) - (label1.Width / 2);
return new Point(x, y);
}
Et définissez la propriété Location de l'étiquette sur cette valeur de retour. Cela garantissait que l'étiquette était toujours au centre du formulaire lorsque le texte changeait et que les repeints pour un formulaire en plein écran n'étaient pas évidents.
Vous pouvez essayer l'extrait de code suivant:
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;
}
C'est vraiment le centre