FlowLayoutPanel hauteur AutoSize ne fonctionne pas
-
21-09-2019 - |
Question
Je travaille sur un UserControl qui se compose d'une bande de ComboBoxes disposés horizontalement à travers la partie supérieure de la commande dans un FlowLayoutPanel, et un datagridview directement en dessous de la FlowLayoutPanel qui occupe tout l'espace restant sur le contrôle. Je dois être en mesure de cacher tous les menus déroulants facilement, donc j'ai SplitContainer avec orientation == Horizontal, avec le FlowLayoutPanel dans SplitContainer.Panel1 et le datagridview dans SplitContainer.Panel2.
La hiérarchie de contrôle est la suivante:
SplitContainer1
SplitContainer1.Panel1
FlowLayoutPanel1
ComboBox1
ComboBox2
ComboBox3
SplitContainer1.Panel2
DataGridView1
Étant donné que le FlowLayoutPanel est orienté horizontalement et l'espace horizontal est limité, la propriété WrapContents du FlowLayoutPanel est vrai, de sorte que les menus déroulants enveloppent vers le bas à la ligne suivante lorsque la commande est faite trop étroite pour toutes les listes déroulantes dans une rangée.
Le problème que je vais avoir est que lorsque l'enveloppe FlowLayoutPanel son contenu vers le bas sur la ligne suivante, sa propriété en hauteur ne change pas en conséquence. Les lignes enveloppées du FlowLayoutPanel sont tronquées, et ne forcent pas le panneau SplitContainer de croître en conséquence en hauteur. J'ai essayé de gérer l'événement FlowLayoutPanel.Resize à croître et à réduire la propriété SPlitContainer.SplitterDistance pour accueillir le contenu enveloppé, mais la propriété FlowLayoutPanel.Height ne change pas lorsque le contenu sont enveloppés. Je suis perplexe. le FlowLayoutPanel est brisé? Comment puis-je redimensionner le conteneur parent du FlowLayoutPanel si FlowLayoutPanel.Height reste toujours le même, quel que soit l'emballage contenu?
Merci
La solution
Il semble que vous faites cela un peu trop compliqué pour ce dont vous avez besoin. Vous pouvez utiliser l'amarrage intégré pour accomplir ce que vous voulez sans utiliser le SplitContainer
. Configurez votre formulaire comme ceci:
FlowLayoutPanel1 (Autosizse = true, Dock = Top)
ComboBox1
ComboBox2
ComboBox3
DataGridView1 (Dock = Fill)
Ensuite, lorsque vous voulez masquer FlowLayoutPanel1
vous pouvez simplement basculer la propriété Visible
pour cacher / montrer.