UserControl
(上)、Label
(フィル、トップダウンフロー、ラップなし)およびFlowLayoutPanel
(下)で構成されるPanel
があります。 。ユーザーコントロールは、取得したもののリストに基づいていくつかのコントロールを作成し、それらをFlowLayoutPanel
に追加します。
このUserControl
を適切にサイズ変更して、FlowLayoutPanel
にスクロールバーがないようにするにはどうすればよいですか? AutoSize
とAutoSizeMode
自体にFlowLayoutPanel
とUserControl
のさまざまな組み合わせを使用しようとしましたが、うまく機能していないようです。最終的にサイズがまったく変わらないか、十分に大きくならないか、ほとんど何もない状態になってしまいます。
すべての提案をありがとう。今回の解決策では、AutoSize
andtrue
自体の両方に対してFlowLayoutPanel
をUserControl
に設定するように見えました。
今、このUserControl
と他のいくつかのコントロールを含むフォームを取得する方法。現時点では完全には理解できませんが、別の質問になると思います。 ..
コントロールの端がUIの他の一部に「接着」されるように、UserControlのAnchor-およびDockプロパティを使用してオプションを設定できます。 UIのサイズが変更されると、コントロールもそれに追随します。
アンカーを使用してユーザーコントロールのすべてのコントロールにドッキングし、それらをコントロールの端にドッキングするように設定すると、コントロールはUserControlでサイズ変更され、アンカー/ドックをUserControlにも設定できるようになります。
FlowLayoutPanel
をTableLayoutPanel
でラップすると、適切な自動サイズ動作が可能になります。
UserControl
は次のようになります。
UserControl
TableLayoutPanel (Dock-Fill)
Row1 : Label
Row2 : FlowLayoutPanel (Panel:Dock-Fill AND AutoSize, Row:AutoSize)
Row3 : Panel
繰り返しますが、そのUserControl
を使用する場合、TableLayoutPanel
行または列を使用してAutoSize
にラップする必要がある可能性があります。
SplitContainers
に注意してください。これは、自動サイズ設定の動作が不均衡になることが多いためです。
これを解決する最良の方法は、flowlayoutpanelのControlAddedイベントのコードを使用して、パネルの高さ(TopDownフローを使用していたため高さ)を次のように調整することでした。
e.Control.Location.Y + e.Control.Height + some margin
また、ユーザーコントロール自体のAutoSizeプロパティをTrueに設定します。
また、ミケルの回答に従って、ドッキングとアンカーの提案のいくつかを行う必要があります。
この機能は、FlowLayoutPanelから継承され、ControlAddedメソッドをオーバーライドする独自のコントロールにカプセル化できます。
フローレイアウトにコントロールを追加すると、フローレイアウトパネルのスクロールバーを取得せずに、追加済みのコントロールのサイズを必要なサイズに変更できます。