151 votes

Comment garder une étiquette centrée dans WinForms ?

Sur WinForms J'utilise un Label pour afficher différents messages comme le succès, l'échec, etc.

J'aimerais centrer cette étiquette dans le formulaire central. Je veux une solution qui la maintienne centrée, qu'il y ait un seul mot ou une phrase entière dans l'étiquette.

320voto

decyclone Points 18778

Définir Label 's AutoSize à la propriété False , TextAlign à la propriété MiddleCenter y Dock à la propriété Fill .

1 votes

Merci decyclone, ça a marché. pouvez-vous nous dire ce que fait Dock ?

3 votes

Con Control.Dock propriété ( msdn.microsoft.com/fr/us/library/ ), vous pouvez ancrer (coller) un contrôle sur un certain côté du conteneur. Par exemple Left , Top , Right o Bottom . Fill indique au contrôle de prendre tout l'espace disponible dans le conteneur.

1 votes

Si vous ne souhaitez pas que l'étiquette occupe tout l'espace disponible, vous pouvez définir la propriété Dock sur "None", comme le suggère l'utilisateur 3866622 dans sa solution programmatique.

14voto

user3866622 Points 1

Quelques contenus supplémentaires mineurs à paramétrer par programme :

Label textLabel = new Label() { 
        AutoSize = false, 
        TextAlign = ContentAlignment.MiddleCenter, 
        Dock = DockStyle.None, 
        Left = 10, 
        Width = myDialog.Width - 10
};            

L'alignement du style et du contenu peut différer de vos besoins. Par exemple, pour une simple étiquette sur un formulaire wpf, j'utilise DockStyle.None.

14voto

Vous y parviendrez en définissant la propriété Anchor : Aucun.

11voto

Umut OVECOGLU Points 146

Si vous ne voulez pas ancrer l'étiquette dans toute la zone disponible, il suffit de définir l'événement SizeChanged au lieu de TextChanged. Le changement de chaque lettre modifiera la propriété de largeur de l'étiquette ainsi que son texte lorsque la propriété autosize est définie sur True. Ainsi, 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;
}

5voto

TheIronCheek Points 493

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

  1. J'avais BackColor réglé donc réglé AutoSize = false y Dock = Fill fait en sorte que la couleur de fond remplisse tout le formulaire
  2. Je n'aurais pas pu AutoSize mis à false 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 vers la gauche :

MyLabel.Left = (this.Width - MyLabel.Width) / 2;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X