web-dev-qa-db-fra.com

Comment garder une étiquette centrée dans WinForms?

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.

126
haansi

Définissez la propriété Label de AutoSize sur False, la propriété TextAlign sur MiddleCenter et la propriété Dock sur Fill.

243
decyclone

Vous y parviendrez avec la propriété de paramétrage Ancre: Aucune.

13

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.

12
user3866622

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;
}
8
Umut OVECOGLU

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.

0
LordPupazz

La réponse acceptée n'a pas fonctionné pour moi pour deux raisons:

  1. J'avais BackColor réglé de manière à régler AutoSize = false et Dock = Fill fait que la couleur d'arrière-plan remplisse tout le formulaire
  2. Je ne pouvais pas avoir AutoSize mis à faux de toute façon parce que le texte de mon étiquette était dynamique

Au 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;
0
TheIronCheek