2010-02-01 6 views
1

Il y a quelque temps, j'ai posté this question sur essayer d'obtenir un panneau de flowlayout pour autosize correctement lorsqu'il est ancré au sommet d'un conteneur. Ce que j'essayais d'accomplir consistait à installer un panneau de flux horizontal (de gauche à droite) couvrant le bord supérieur d'un formulaire, et une vue de données de données occupant le reste de l'espace disponible sous le panneau de configuration de flux. J'avais de la difficulté à obtenir la propriété height de flowlayoutpanel pour qu'elle s'autosise comme elle le devrait. La réponse affichée fonctionnait parfaitement pour ce que j'essayais d'accomplir, ce qui était génial ...WinForms UserControl Layout Problèmes de mise en page automatique

Incapable de s'en sortir tout seul, j'essaie maintenant d'aller un peu plus loin et d'envelopper le panneau flowlayout dans un UserControl. J'ai découvert, cependant, qu'ainsi le flowlayoutpanel ne peut plus redimensionner correctement sa hauteur.

est ici la première mise en page, qui fonctionne à merveille:

FlowLayoutPanel1 (Autosize = true, Dock = Top) 
    ComboBox1 
    ComboBox2 
    ComboBox3 
DataGridView1 (Dock = Fill) 

Et voilà avec FlowLayoutPanel enveloppé dans un UserControl:

UserControl (Autosize = true, Dock = Top) 
    FlowLayoutPanel1 (Autosizse = true, Dock = Fill) 
    ComboBox1 
    ComboBox2 
    ComboBox3 
DataGridView1 (Dock = Fill) 

Pour une raison quelconque, FlowLayoutPanel ne redimensionne pas sa hauteur correctement lorsque le formulaire est redimensionné C'est assez facile à reproduire. Oh aussi, le contenu de FlowLayoutPanel peut être n'importe quoi, pas seulement les ComboBox.

Répondre

1

Je pense que le problème est que vous avez FlowLayoutPanel1.Dock = Fill qui remplace sa tentative d'autosize sa hauteur.

Le correctif est probablement de définir FlowLayoutPanel1.Dock = Top (comme vous l'aviez précédemment), puis de gérer l'événement FlowLayoutPanel1.Resize pour redimensionner votre contrôle utilisateur. Essentiellement, vous essayez manuellement de garder le UserControl.Size en synchronisation avec le FlowLayoutPanel1.Size.

Il pourrait y avoir une façon plus intelligente de le faire, mais nous espérons qu'il vous obtiendrez sur la bonne voie ...

+0

Cela fonctionne presque. L'événement Resize fonctionne parfaitement, mais je dois redimensionner le formulaire pour déclencher l'événement Resize. Je voudrais que cet ajustement de taille se produise lorsque le formulaire est initialement affiché, pas seulement après qu'il a été redimensionné. J'ai essayé les événements UserControl.Load, Layout, VisibleChanged et Paint sans succès. – echo

+2

Je remarque qu'il y a un événement FlowLayoutPanel.SizeChanged, peut-être que j'essaie? Je ne suis pas près d'une machine avec VS mis en place donc je ne peux pas jouer avec moi-même. Vous pouvez également essayer l'événement FlowLayoutPanel.ControlAdded –

+0

SizeChanged a fait l'affaire. Merci – echo

0

Est-ce que votre UserControl a un ensemble de largeur? Regardez dans le designer.cs pour être sûr. Si c'est le cas, vous devrez réinitialiser cette propriété.

+0

La largeur semble fonctionner OK, mais la hauteur reste constante. Lorsque les enfants du flowlayoutpanel se rétractent pour former de nouvelles lignes, la hauteur n'augmente pas en conséquence et les enfants sont coupés verticalement. – echo

Questions connexes