2010-01-15 4 views
1

J'ai actuellement une zone de texte sur un Windows Forms, et j'ai besoin d'ajouter dynamiquement un contrôle de boîte PictureBox à droite de la zone de texte.Comment déterminer la largeur d'un contrôle de formulaires Windows dont la largeur a été augmentée car il est Ancré?

Je crée PictureBox et programmation I Lorsque l'emplacement du PictureBox, je suis mise comme ceci:

pBox.Location = new Point (tbControl.Location.X + ctrl.Width, ctrl.Location .Y);

Donc, je suis en train de régler la zone d'image à l'emplacement X de la zone de texte PLUS la largeur de la zone de texte. Toutefois, étant donné que la zone de texte a une propriété d'ancrage définie sur droite, sa largeur augmente pour remplir l'espace entre elle et la bordure de formulaire.

Le problème est que même si la largeur de la zone de texte est visuellement plus grande que la valeur réelle de TextBox.Width. la propriété Width ne prend pas en compte la largeur supplémentaire de l'ancrage.

J'ai déjà essayé des propriétés comme Textbox.Bounds.Width, Textbox.ClientSize.Width, Textbox.DisplayRectangle.Width, etc. sans chance. Toutes ces propriétés renvoient la largeur d'origine du contrôle sans tenir compte de la largeur redimensionnée en raison de la propriété Anchor.

Est-ce que quelqu'un sait comment je peux déterminer la taille réelle de la zone de texte? Merci

Répondre

2

La propriété Width suit toujours la largeur actuelle d'un contrôle, qu'il soit ancré ou non. Toutefois, TextBox va se développer lorsque vous agrandissez le conteneur et que cela le fera chevaucher le PictureBox. Vous devez également ancrer le PB sur la droite.

+0

nobugz, je ne pense pas que l'ancrage du PB est la bonne approche, car cela augmenterait sa largeur au lieu de déplacer le point de départ du pb. J'ai juste besoin de trouver un moyen d'ajouter les PBs jusqu'à ce que les boîtes de texte soient développées. – GR7

+0

Non, cela ne fait qu'augmenter la largeur si elle est ancrée des deux côtés. Seulement ancrer à droite. –

+0

Vous aviez raison nobugz! Ancrer le PB à droite a fait l'affaire. Merci beaucoup. – GR7

0

Ceux-ci devraient retourner la taille ajustée. Soit vous faites référence à la mauvaise zone de texte, soit vous faites la requête avant que la taille ait réellement changé.

+0

Je pense que vous avez raison John ... ce qui est bizarre, car je pense que les contrôles sont développés avant l'affichage du formulaire (mon programme est déjà maximisé lorsque j'ouvre le nouveau formulaire), mais il semble que mon Le processus d'ajout des contrôles a lieu avant que les zones de texte ne soient développées. Des idées sur comment y arriver après que les contrôles sont ancrés? – GR7

+0

Si vous vous abonnez à la notification SizeChanged, cela devrait être assez tard. –

+0

Salut John. La solution de nobugz a fonctionné, mais je suis curieux de connaître l'approche que vous avez suggérée (pour l'apprentissage). Vouliez-vous redessiner ou repositionner la zone d'image dans l'événement SizeChanged de la zone de texte? – GR7

Questions connexes