Réponses:
Définissez Labella AutoSizepropriété de sur False, la TextAlignpropriété sur MiddleCenteret la Dockpropriété sur Fill.
Control.Dockpropriété ( msdn.microsoft.com/en-us/library/… ), vous pouvez ancrer (coller) un contrôle à un certain côté du conteneur. Par exemple Left, Top, Rightou Bottom. Fillindique au contrôle de prendre tout l'espace disponible dans le conteneur.
Dockdécor.
Dockle réglage était inutile. La modification de la AutoSizeproprié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:
BackColordéfini ce paramètre AutoSize = falseet Dock = Fillfait que la couleur d'arrière-plan remplisse tout le formulaireAutoSizedé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
