1

プロパティを持つFlowLayoutPanelがあります。

  • ドック=塗りつぶし(ユーザーコントロールで)
  • FlowDirection = TopDown
  • WrapContents = false

パネルに追加された各アイテムが下部に追加されるように、このようにします。

このパネルに追加する項目は、それ自体にFlowLayoutPanelsがあるユーザーコントロールですが、標準の動作(LeftToRight、WrapContents = true)があります。私が抱えている問題は、内部ユーザーコントロールのFlowLayoutPanelが外部コントロールを満たすようにサイズ変更されていないことですが、これらのコントロールで自動サイズ設定をtrueに設定すると、パネルはその内容をラップしません-これは明らかに既知の問題です。

私がやろうとしていることを視覚化するのに役立つ場合は、次のようになります。

    ______________________________
    | __________________________ | 外箱=外部フローレイアウト
    | |テキスト____________________| | (TopDown、NoWrap)
    | | ############ | |
    | | #### | | 内部ボックス=テキストと
    | | ________________________ | | それらのflowlayoutpanel
    | __________________________ | (LeftToRight、ラップ)
    | |テキスト____________________| |   
    | | ############ | | #=写真
    | | ## | |
    | | ________________________ | |
    | ____________________________ |
4

1 に答える 1

0

LayoutEngine をサブクラス化し、カスタム エンジンを使用して独自のバージョンのペインを作成しない限り、FlowLayoutPanel にコントロールをドッキングすることはできないと思います。ただし、この問題には素晴らしい解決策があります。TableLayoutPanel を使用してください。必要な列は 1 つだけなので、この目的で TableLayoutPanel を使用するのは非常に簡単です。

唯一の注意点は、最初に TLP の行数を 0 にする必要があることです。その後、ユーザー コントロールをプログラムで追加します。トリックは、ユーザー コントロールをトップにドッキングすることです。これは機能します:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        TableLayoutPanel tlp1 = new TableLayoutPanel();
        this.Controls.Add(tlp1);
        tlp1.Dock = DockStyle.Fill;

        for (int i = 0; i < 5; i++)
        {
            UserControl1 uc = new UserControl1();
            uc.Dock = DockStyle.Top;
            tlp1.Controls.Add(uc);
        }
    }
}

この場合の UserControl1 は、FLP を備えたユーザー コントロールであり、その中にたくさんのボタンがあり、ドッキングとフローが機能することを確認できました。

于 2010-03-26T04:07:30.053 に答える