2009-05-03 9 views
3

J'ajoute dynamiquement des zones de texte à un formulaire lors de l'exécution. Tout fonctionne correctement, c'est-à-dire que les zones de texte sont alignées, ancrées et redimensionnent automatiquement jusqu'à ce que le formulaire soit agrandi. Lors de la maximisation du formulaire, les zones de texte sont ajoutées au même emplacement alors que le formulaire était non agrandie. Cela provoque un désalignement des zones de texte.Utilisation de la propriété d'ancrage avec des contrôles ajoutés dynamiquement

Comment puis-je m'assurer que toutes les zones de texte sont au même endroit et de la même taille tant que l'état de la fenêtre est normal et agrandi?

EDIT:

Btw J'utilise C#

EDIT:

Est-ce qu'un FlowLayoutPanel être utile ici?

+0

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. –

+0

J'utilise le réglage Haut | Angle droit. Les zones de texte avec le paramètre Anchor comme Top | Left s'alignent correctement. – tijuthomas

+0

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é? –

Répondre

0

La propriété Anchor spécifie quelles bordures les contrôles doivent garantir qu'ils sont toujours à la même distance. Cela peut être assez déroutant, c'est pourquoi vous voyez les choses bouger lorsque vous êtes ancré à la bonne frontière. Si vous souhaitez simplement vous assurer que l'affichage de la zone de texte reste cohérent par rapport à lui-même, je suggère de déposer un Panel, avec un ancrage sur le Panel, puis d'ajouter des zones de texte au Panel. Les coordonnées X et Y de vos zones de texte deviennent relatives au panneau. Il est donc beaucoup plus facile de procéder à la mise en page, en particulier lorsque l'emplacement du panneau change soudainement.

2

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:

  1. 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.
  2. 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.
Questions connexes