FlowLayoutPanel AutoSize の高さが機能しない
-
21-09-2019 - |
質問
私は、flowlayoutpanel のコントロールの上部に水平に配置された多数の ComboBox と、コントロールの残りのすべてのスペースを占有する flowlayoutpanel の真下にある datagridview で構成される UserControl に取り組んでいます。すべてのドロップダウンを簡単に非表示にできる必要があるので、Orientation == horizontal の SplitContainer を用意し、SplitContainer.Panel1 に flowlayoutpanel、SplitContainer.Panel2 に datagridview を配置します。
制御階層は次のとおりです。
SplitContainer1
SplitContainer1.Panel1
FlowLayoutPanel1
ComboBox1
ComboBox2
ComboBox3
SplitContainer1.Panel2
DataGridView1
flowlayoutpanel は水平方向に配置され、水平方向のスペースが限られているため、flowlayoutpanel の WrapContents プロパティは True になり、コントロールの幅が狭すぎてすべてのドロップダウンを 1 行に収まらない場合、ドロップダウンは次の行に折り返されます。
私が抱えている問題は、flowlayoutpanel がその内容を次の行にラップするときに、Height プロパティがそれに応じて変化しないことです。flowlayoutpanel のラップされた行はクリップされ、それに応じて SplitContainer パネルの高さが強制的に拡大されることはありません。FlowLayoutPanel.Resize イベントを処理して、ラップされたコンテンツに合わせて SPlitContainer.SplitterDistance プロパティを拡大および縮小しようとしましたが、コンテンツがラップされても FlowLayoutPanel.Height プロパティは変更されません。困っています。FlowLayoutPanelが壊れているのでしょうか?コンテンツのラッピングに関係なく、FlowLayoutPanel.Height が常に同じままの場合、FlowLayoutPanel の親コンテナのサイズを変更するにはどうすればよいですか?
ありがとう
解決
それはあなたがしているが、これもあなたが必要なもののために複雑少し作るように思えます。あなたは、組み込みのSplitContainer
を使用せずに、あなたが望むものを達成するためにドッキングを使用することができます。代わりに、このようなフォームを設定します:
FlowLayoutPanel1 (Autosizse = true, Dock = Top)
ComboBox1
ComboBox2
ComboBox3
DataGridView1 (Dock = Fill)
あなたが非表示FlowLayoutPanel1
にしたいとき次に、あなただけの非表示にするVisible
プロパティトグル/それを表示することができます。