8 votes

La propriété Anchor en C# ne semble pas fonctionner

J'ai ajouté quelques contrôles à mon formulaire et modifié la propriété d'Anchor comme je m'y attendais, mais lorsque je redimensionne le formulaire au moment de l'exécution, les contrôles restent à la même place.

Par exemple, j'ai deux boutons dans le coin inférieur droit d'un formulaire - ils sont sur le formulaire, sans conteneur ni rien de tel. Anchor = Bottom, Right. FormBorderStyle = Sizable. Mais lorsque je redimensionne le formulaire en cours d'exécution, les boutons ne se déplacent pas.

Est-ce que j'ai manqué quelque chose ?

c# 2005

12voto

Oliver Points 19006

Une autre possibilité serait que vous ayez accidentellement placé vos boutons pas directement sur le formulaire. Au lieu de cela, vous les avez placés dans un conteneur (par exemple, un panneau, un tableLayoutPanel, etc.) et ce conteneur n'a pas défini correctement ses valeurs d'ancrage ou d'ancrage.

Pour être absolument sûr, vous devriez jeter un coup d'œil dans designer.cs et vérifier si vos boutons sont ajoutés directement au formulaire par this.Controls.Add() ou s'ils sont ajoutés dans n'importe quelle autre liste de contrôles (ex. panel.Controls.Add() ).

5voto

Roberto Points 11

Je sais qu'il s'agit d'un vieux message, mais j'aimerais quand même essayer d'apporter ma contribution.

Mon problème était que le formulaire que j'ajoutais à mon panneau n'adaptait pas automatiquement sa taille lorsque la taille du panneau parent était modifiée.

Le problème était que je faisais ça :

form.WindowState = FormWindowState.Maximized; // <-- source of the problem
form.AutoSize = true; //this causes the form to grow only. Don't set it if you want to resize automatically using AnchorStyles, as I did below.
form.FormBorderStyle = FormBorderStyle.Sizable; //I think this is not necessary to solve the problem, but I have left it there just in case :-)
panel1.Controls.Add(form);
form.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                    | System.Windows.Forms.AnchorStyles.Left)
                    | System.Windows.Forms.AnchorStyles.Right)));
form.Dock = DockStyle.Fill; //this provides the initial size adjust to parent' size.
form.Visible = true;

Pour résoudre ce problème, j'ai simplement commenté la première ligne //form.WindowState = FormWindowState.Maximized; et tout a fonctionné comme sur des roulettes.

4voto

Bostwick Points 199

De plus, si vous avez défini la propriété de taille automatique, cela causera des problèmes.

3voto

user Points 3280

Quelle est la valeur de la propriété Dock ? Cela peut annuler les propriétés d'ancrage.

1voto

porfirion Points 11

J'ai le même problème dans VS11 Beta. J'ai utilisé les ancres de nombreuses fois et cela a toujours fonctionné correctement, mais maintenant je ne peux pas comprendre ce qui se passe avec eux et pas seulement - le remplissage du dock ne fonctionne pas non plus ! (aucune taille automatique ou propriétés de dock ne sont utilisées)

P.S. (après 40 minutes) Maintenant, il semble que j'ai trouvé le problème : j'ai un écouteur d'événement Resize pour PictureBox et je crée une nouvelle image pour la nouvelle taille de la boîte à images dans le champ onResize manipulateur. Lorsque je supprime la création de nouvelles images, tout fonctionne !

Maintenant, j'utilise SizeChanged et dans ce gestionnaire d'événement, je crée une nouvelle image. Donc je pense que je ne devrais pas changer l'objet expéditeur avant que le redimensionnement ne soit terminé.

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