WinForms UserControl Mise en page Autosize Problèmes
-
24-09-2019 - |
Question
Un peu en arrière, j'ai posté cette question d'essayer d'obtenir un FlowLayoutPanel à autoSize correctement lorsqu'il est connecté au-dessus d'un récipient. Ce que je voulais accomplir était d'installer une ligne horizontale (de gauche à droite-) FlowLayoutPanel enjambant le bord supérieur d'une forme et un datagridview prendre le reste de l'espace disponible en dessous de la FlowLayoutPanel. J'avais du mal à obtenir la propriété de la hauteur du FlowLayoutPanel à autoSize comme il le devrait. La réponse affichée a parfaitement fonctionné pour ce que je voulais accomplir, ce qui était super ...
Impossible de laisser assez seul, je suis en train maintenant d'aller un peu plus loin et envelopper le FlowLayoutPanel dans un UserControl. Je l'ai découvert, cependant, que faire cela provoque l'FlowLayoutPanel de ne plus redimensionner sa hauteur correctement.
Voici la première mise en page, qui fonctionne à merveille:
FlowLayoutPanel1 (Autosize = true, Dock = Top)
ComboBox1
ComboBox2
ComboBox3
DataGridView1 (Dock = Fill)
Et ici il est 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 correctement sa hauteur lorsque le formulaire est redimensionné. Ceci est assez facile à reproduire. Oh aussi, le contenu du FlowLayoutPanel peut être quelque chose, non seulement ComboBoxes.
La solution
Je pense que le problème est que vous avez la FlowLayoutPanel1.Dock = Fill
qui l'emporte, il est tentative de autoSize sa hauteur.
Le correctif est probablement à mettre FlowLayoutPanel1.Dock = Top
(comme vous l'aviez avant), puis gérer l'événement FlowLayoutPanel1.Resize
pour redimensionner votre contrôle utilisateur. Essentiellement, vous essayez manuellement pour garder le UserControl.Size
en phase 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 ...
Autres conseils
Votre UserControl a une largeur réglée? Regardez dans les designer.cs pour être sûr. Le cas échéant, vous devrez réinitialiser cette propriété.