2009-06-17 11 views
2

J'ai créé un contrôle utilisateur qui contient une étiquette et une barre de progression. J'ai également créé un autre contrôle d'utilisateur qui contient uniquement un panneau de disposition de flux avec la direction d'écoulement définie vers le haut. Lorsque j'ajoute le premier au panneau de disposition de flux de ce dernier, je voudrais qu'il utilise la quantité maximale d'espace horizontal disponible et la quantité minimale d'espace vertical pour que les hauteurs par défaut de l'étiquette et de la barre de progression soient respectées. Y a-t-il un moyen de faire cela?Obtention d'un contrôle utilisateur pour remplir son conteneur

J'ai téléchargé un screenshot pour aider à illustrer le problème. Le contrôle utilisateur contenant l'étiquette et la barre de progression est en rouge et le contrôle utilisateur contenant le panneau de disposition de flux est en vert.

+0

La source du problème semble être que l'ajout de contrôles à un FlowLayoutPanel dont FlowDirection est défini sur TopDown les fera disparaître si leur propriété Dock est définie sur "Top" ou que leur propriété Anchor est définie sur "AnchorStyles.Left | AnchorStyles.Right ". –

Répondre

2

Juste définissez la propriété Dock de contrôle utilisateur « Top » ...

UserControl.Dock = System.Windows.Forms.DockStyle.Top; 
+0

La définition de la propriété Dock sur Top dans le constructeur du contrôle utilisateur les rend invisibles. Tout ce que j'ai, c'est le panneau de disposition du flux vert. –

1

Positionnement et superposition des contrôles peut être difficile parfois. Assurez-vous que la propriété Dock du contrôle de flux vert est définie sur Remplir. Après cela, commencez à placer vos commandes d'étiquettes et commencez à les positionner. Vous pouvez définir la propriété Dock sur Top si vous le souhaitez, mais je n'en suis pas un fan dans la plupart des cas. Je dirais que l'une des choses les plus importantes à retenir lors de la définition de la position des contrôles, en particulier lors de l'utilisation de la propriété Dock, est que cet ordre est important. Si vous ne pouvez pas voir un contrôle (c'est-à-dire ... qu'il semble caché derrière d'autres contrôles), essayez de réordonner la façon dont ils sont ajoutés au parent (dans ce cas, le panneau de contrôle de flux). Si vous utilisez le concepteur dans VS, vous pouvez le faire en cliquant avec le bouton droit de la souris et en utilisant les commandes "Envoyer en haut/en bas" (très utile lorsque vous utilisez la propriété Dock, vous pouvez également voir les contrôles en couches)).

Aussi, à mon avis, une option souvent négligée est l'utilisation correcte de Control.Anchor. Je suggérerais de le regarder.

4

Je pense que le problème vient du fait que vous ne voulez pas que les contrôles soient "Flow", vous voulez juste qu'ils occupent la position la plus haute dans votre contrôle hôte. Vous pouvez obtenir les résultats dont vous avez besoin en utilisant simplement un contrôle Panel standard à la place. Ajoutez simplement les contrôles utilisateur enfants à la collection Controls du contrôle de conteneur et définissez le Dock du contrôle utilisateur ajouté sur "Top" par la suite.

 ChildDisplay dsp1 = new ChildDisplay(); 
     pnlHost.Controls.Add(dsp1); 
     dsp1.Dock = DockStyle.Top; 

     ChildDisplay dsp2 = new ChildDisplay(); 
     pnlHost.Controls.Add(dsp2); 
     dsp2.Dock = DockStyle.Top; 

     ChildDisplay dsp3 = new ChildDisplay(); 
     pnlHost.Controls.Add(dsp3); 
     dsp3.Dock = DockStyle.Top; 

Remarque: remplacez [ChildDisplay] par le nom de UserControl que vous utilisez.

Questions connexes