web-dev-qa-db-ja.com

C#:ユーザーコントロールを適切に自動サイズ調整する方法

UserControl(上)、Label(フィル、トップダウンフロー、ラップなし)およびFlowLayoutPanel(下)で構成されるPanelがあります。 。ユーザーコントロールは、取得したもののリストに基づいていくつかのコントロールを作成し、それらをFlowLayoutPanelに追加します。

このUserControlを適切にサイズ変更して、FlowLayoutPanelにスクロールバーがないようにするにはどうすればよいですか? AutoSizeAutoSizeMode自体にFlowLayoutPanelUserControlのさまざまな組み合わせを使用しようとしましたが、うまく機能していないようです。最終的にサイズがまったく変わらないか、十分に大きくならないか、ほとんど何もない状態になってしまいます。

22
Svish

すべての提案をありがとう。今回の解決策では、AutoSizeandtrue自体の両方に対してFlowLayoutPanelUserControlに設定するように見えました。

今、このUserControlと他のいくつかのコントロールを含むフォームを取得する方法。現時点では完全には理解できませんが、別の質問になると思います。 ..

11
Svish

コントロールの端がUIの他の一部に「接着」されるように、UserControlのAnchor-およびDockプロパティを使用してオプションを設定できます。 UIのサイズが変更されると、コントロールもそれに追随します。

アンカーを使用してユーザーコントロールのすべてのコントロールにドッキングし、それらをコントロールの端にドッキングするように設定すると、コントロールはUserControlでサイズ変更され、アンカー/ドックをUserControlにも設定できるようになります。

5
Mickel

FlowLayoutPanelTableLayoutPanelでラップすると、適切な自動サイズ動作が可能になります。

UserControlは次のようになります。

UserControl
    TableLayoutPanel (Dock-Fill)
        Row1 : Label
        Row2 : FlowLayoutPanel (Panel:Dock-Fill AND AutoSize, Row:AutoSize)
        Row3 : Panel

繰り返しますが、そのUserControlを使用する場合、TableLayoutPanel行または列を使用してAutoSizeにラップする必要がある可能性があります。

SplitContainersに注意してください。これは、自動サイズ設定の動作が不均衡になることが多いためです。

2
Bryan Menard

これを解決する最良の方法は、flowlayoutpanelのControlAddedイベントのコードを使用して、パネルの高さ(TopDownフローを使用していたため高さ)を次のように調整することでした。

e.Control.Location.Y + e.Control.Height + some margin

また、ユーザーコントロール自体のAutoSizeプロパティをTrueに設定します。

また、ミケルの回答に従って、ドッキングとアンカーの提案のいくつかを行う必要があります。

この機能は、FlowLayoutPanelから継承され、ControlAddedメソッドをオーバーライドする独自のコントロールにカプセル化できます。

0
benPearce

フローレイアウトにコントロールを追加すると、フローレイアウトパネルのスクロールバーを取得せずに、追加済みのコントロールのサイズを必要なサイズに変更できます。

0
Surya