web-dev-qa-db-fra.com

Centrer les contrôles dans un formulaire dans .NET (Winforms)?

J'essaie de centrer un contrôle de taille fixe dans un formulaire.

Par intérêt, y a-t-il une manière non idiote de faire cela? Ce que je veux vraiment, c'est quelque chose d'analogue à la propriété css text-align.

Pour le moment, je mets la taille de la propriété de remplissage du formulaire environnant à une taille appropriée et la propriété Dock du contrôle à remplir.

128
user47741

Vous pouvez y parvenir avec l'utilisation de ancres. Ou plus précisément le non utilisation d’eux.

Les contrôles sont ancrés par défaut en haut à gauche du formulaire, ce qui signifie que lorsque la taille du formulaire sera modifiée, leur distance par rapport au côté supérieur gauche du formulaire restera constante. Si vous modifiez l'ancrage du contrôle en bas à gauche, le contrôle conservera la même distance entre les côtés inférieur et gauche du formulaire lorsque le formulaire sera redimensionné.

Si vous désactivez l'ancrage dans une direction, le contrôle restera centré dans cette direction lors du redimensionnement.

NOTE: La désactivation de l'ancrage via la fenêtre de propriétés dans VS2015 peut nécessiter la saisie de Aucune, Aucune (au lieu de la valeur par défaut Haut, Gauche)

242
splattne
myControl.Left = (this.ClientSize.Width - myControl.Width) / 2 ;
myControl.Top = (this.ClientSize.Height - myControl.Height) / 2;
107
Mitch Wheat

Puisque vous ne précisez pas si le formulaire peut être redimensionné ou non, il existe un moyen simple de ne pas vous soucier de le redimensionner (si vous vous en souciez, optez pour la solution Mitch Wheats):

Sélectionnez la commande -> Format (option de menu) -> Centrer dans la fenêtre -> Horizontalement ou verticalement

41
Robert MacLean

J'ai trouvé un excellent moyen de le faire et cela fonctionnera avec plusieurs contrôles. Ajouter un TableLayout avec 3 colonnes. Faites de la colonne centrale une taille absolue (quelle que soit la pièce dont vous avez besoin). Définissez les deux colonnes extérieures sur 100%. Ajoutez un panneau à la colonne centrale, ajoutez les contrôles dont vous avez besoin et placez-les à l'endroit souhaité. Ce panneau central restera désormais centré dans votre formulaire.

8
Chad

Pour centrer le bouton dans le panneau o dans un autre conteneur, suivez cette étape:

  1. Au moment de la conception, définissez la position
  2. Aller aux propriétés Ancre du bouton et définir cette valeur comme image suivante

enter image description here

6
daniele3004

Vous pouvez placer le contrôle que vous souhaitez centrer dans un panneau et définir les valeurs de remplissage gauche et droite sur une valeur supérieure à celle par défaut. Tant qu'ils sont égaux et que votre contrôle est ancré aux côtés du panneau, il apparaîtra centré dans ce panneau. Vous pouvez ensuite ancrer le panneau de conteneur à son parent si nécessaire.

2
Droj

vous pouvez placer toutes vos commandes dans le panneau, puis écrire un code pour déplacer votre panneau au centre de votre formulaire.

panelMain.Location = 
    new Point(ClientSize.Width / 2 - panelMain.Size.Width / 2, 
              ClientSize.Height / 2 - panelMain.Size.Height / 2);

panelMain.Anchor = AnchorStyles.None;
1
Ahad aghapour

En outre, si vous souhaitez l'aligner au centre d'un autre contrôle:

//The "ctrlParent" is the one on which you want to align "ctrlToCenter".
//"ctrlParent" can be your "form name" or any other control such as "grid name" and etc.
ctrlToCenter.Parent = ctrlParent;

ctrlToCenter.Left = (ctrlToCenter.Parent.Width - ctrlToCenter.Width) / 2;
ctrlToCenter.Top = (ctrlToCenter.Parent.Height - ctrlToCenter.Height) / 2;
0
M. Fawad Surosh

Cela implique de le regarder (eh bien, je suppose que vous pourriez sortir une calculatrice et calculer) mais insérez simplement ledit contrôle sur le formulaire, puis supprimez tout ancrage (ancre = Aucun).

0
t3rse