C'est une question assez ancienne, mais peut-être que je suis capable d'y répondre.
Après avoir lu tous vos commentaires, je pense que je peux résumer votre problème à ceci:
- Vous avez une forme à une taille spécifique et d'ajouter des contrôles à l'exécution à un endroit précis avec l'ancre réglé sur
Top | Right
.
- Si vous affichez simplement le formulaire et que les commandes s'affichent, tout fonctionne correctement
- Si vous agrandissez votre formulaire (ou modifiez sa taille), vos contrôles n'apparaîtront plus à l'emplacement souhaité.
Pour se débarrasser de ce problème, vous pouvez essayer des approches différentes:
- Utilisez un FlowLayoutPanel, prendre soin de la FlowDirection et peut-être tout simplement créer tous vos contrôles nécessaires à l'avance et juste basculer l'état visible.
- Utilisez les valeurs correctes pour l'emplacement de vos contrôles nouvellement créés.
Le deuxième point est l'erreur que vous avez (je pense). Vous avez trouvé un moyen de calculer l'emplacement de votre contrôle si votre formulaire a sa taille d'origine. Pour obtenir la position correcte si la taille du formulaire a changé (par exemple maximisée), vous devez tenir compte de plusieurs facteurs.
- Les valeurs delta de votre taille par défaut à votre taille actuelle.
- Le (s) ancre (s) que vous souhaitez définir sous votre contrôle.
Dans votre cas, vous souhaitez mettre un contrôle qui est ancré Top | Right
, mais l'emplacement est fixé par Top | Left
. Dans ce cas, vous devez calculer la différence entre control.location.x et form.width dans sa taille par défaut. Ensuite, vous prenez cette différence et la soustrayez de la largeur actuelle du formulaire. Maintenant, vous pouvez placer votre contrôle à cette position (parce que Top ne change jamais à travers un redimensionnement). Si vous avez une ancre à Bottom | Right
vous devez calculer la même chose avec control.location.y et form.height.
Le comportement et le calcul si aucune ancre, pour Top | Bottom
ou Left | Right
sont définies est laissé comme un exercice au lecteur. ;-)
Last but not least, il y a aussi une autre façon hacky pour obtenir votre contrôle à la position droite:
- Si vous souhaitez placer une nouvelle commande changer quelque part
Form.Visible
-false
- Enregistrer l'état de forme, la taille et l'emplacement
- Modifier les à vos valeurs par défaut
- Ajoutez les contrôles que vous voulez
- Restaurer les valeurs précédemment enregistrées
- Rendez le formulaire visible à nouveau.
Quel paramètre d'ancrage utilisez-vous? La valeur par défaut (Haut | Gauche) ferait que vos contrôles resteraient à la même position par rapport à la partie supérieure gauche du formulaire et conserveraient la même taille, quel que soit le format du formulaire. –
J'utilise le réglage Haut | Angle droit. Les zones de texte avec le paramètre Anchor comme Top | Left s'alignent correctement. – tijuthomas
Ainsi, les zones de texte Haut | Droite apparaissent collées dans le coin supérieur droit du formulaire? Comment voulez-vous que ces zones de texte s'organisent lorsque le formulaire est redimensionné? –