Dans WinForms
j'utilise un Label
pour afficher différents messages tels que succès, échec, etc.
Je voudrais centrer cette étiquette dans la forme centrale. Je veux une solution qui la maintiendra centrée, qu’il n’y ait qu’un mot ou une phrase entière dans l’étiquette.
Définissez la propriété Label
de AutoSize
sur False
, la propriété TextAlign
sur MiddleCenter
et la propriété Dock
sur Fill
.
Vous y parviendrez avec la propriété de paramétrage Ancre: Aucune.
Quelques contenus supplémentaires mineurs à paramétrer par programmation:
Label textLabel = new Label() {
AutoSize = false,
TextAlign = ContentAlignment.MiddleCenter,
Dock = DockStyle.None,
Left = 10,
Width = myDialog.Width - 10
};
L'alignement du style de dock et du contenu peut différer de vos besoins. Par exemple, pour une étiquette simple sur un formulaire wpf, j'utilise DockStyle.None.
Si vous ne souhaitez pas ancrer une étiquette dans toute la zone disponible, définissez simplement l'événement SizeChanged à la place de TextChanged. La modification de chaque lettre modifiera la propriété width de label ainsi que son texte lorsque la propriété autosize sera définie sur True. Donc, en passant, vous pouvez utiliser n’importe quelle formule pour garder l’étiquette centrée dans la forme.
private void lblReport_SizeChanged(object sender, EventArgs e)
{
lblReport.Left = (this.ClientSize.Width - lblReport.Size.Width) / 2;
}
Je voulais faire quelque chose de similaire, mais sur un formulaire avec une image d'arrière-plan, j'ai constaté que lorsque le texte de l'étiquette changeait, les repeints étaient évidents avec cette méthode. J'ai donc procédé comme suit: * Définissez l'étiquette AutoSize sur true et TextAlign sur MiddleCenter
Ensuite, chaque fois que le texte a changé (le mien a été effectué à 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 était modifié et que les repeints pour un formulaire en plein écran n'étaient pas évidents.
La réponse acceptée n'a pas fonctionné pour moi pour deux raisons:
BackColor
réglé de manière à régler AutoSize = false
et Dock = Fill
fait que la couleur d'arrière-plan remplisse tout le formulaireAutoSize
mis à faux de toute façon parce que 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;