12

フローレイアウトパネルを保持するグループボックスがあり、フローレイアウトパネルは一連のコントロールを保持します。フローレイアウトパネルを親とドッキングするように設定しました。パネルにいくつのコントロールがあるかわからないので、グループボックスの自動サイズをtrueに設定し、自動サイズモードを拡大および縮小に設定しました。これを行うと、グループボックスは空のように縮小します。グループボックスを削除できないように、キャプションが必要です。なぜこれが起こっているのか誰もが知っていますか?

4

4 に答える 4

7

FlowLayoutPanelがゼロに縮小するのを妨げるものは何もありません。少なくとも、AutoSizeプロパティもTrueに設定する必要があります。

于 2010-07-27T17:14:21.423 に答える
5

今日も同じことをしようとしていました。以下は、私が思いついた解決策です。これは、FlowLayoutPanelをGroupBox内にドッキングし、FlowLayoutPanelのResizeイベントとControlAddedイベントを使用して、親GroupBoxのサイズ変更をトリガーすることです。

サイズ変更ハンドラーは、FlowLayoutPanelの最後のコントロールの下部を見つけ、FlowLayoutPanelの一番下のコントロールを保持するのに十分なスペースでGroupBoxのサイズを変更します。

FlowLayoutPanelとGroupPanelでAutoSize=trueを使用してみました。ただし、残念ながら、これによりFlowLayoutPanelを水平方向に拡大できます。

public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        InitializeComponent();

        int numGroupBoxes = 4;

        for (int groupBoxIndex=0; groupBoxIndex<numGroupBoxes; groupBoxIndex++ )
        {
            GroupBox groupBox = new GroupBox();
            groupBox.Text = "Group " + groupBoxIndex;
            groupBox.Size = new Size(this.Width, 0);
            groupBox.Dock = DockStyle.Top;
            this.Controls.Add(groupBox);

            FlowLayoutPanel groupBoxFlowLayout = new FlowLayoutPanel();
            groupBoxFlowLayout.Dock = DockStyle.Fill;
            groupBox.Controls.Add(groupBoxFlowLayout);

            int extraSpace = 25; // the difference in height between the groupbox and the contents inside of it

            MethodInvoker resizeGroupBox = (() =>
            {
                int numControls = groupBoxFlowLayout.Controls.Count;
                if ( numControls > 0 )
                {
                    Control lastControl = groupBoxFlowLayout.Controls[numControls - 1];
                    int bottom = lastControl.Bounds.Bottom;
                    groupBox.Size = new Size(groupBox.Width, bottom + extraSpace);
                    groupBoxFlowLayout.Size = new Size(groupBoxFlowLayout.Width, bottom);
                }
            });

            groupBoxFlowLayout.Resize += ((s, e) => resizeGroupBox());
            groupBoxFlowLayout.ControlAdded += ((s, e) => resizeGroupBox());

            // Populate each flow panel with a different number of buttons
            int numButtonsInGroupBox = 3 * (groupBoxIndex+1);
            for (int buttonIndex = 0; buttonIndex < numButtonsInGroupBox; buttonIndex++)
            {
                Button button = new Button();
                button.Margin = new Padding(0, 0, 0, 0);
                string buttonText = buttonIndex.ToString();
                button.Text = buttonText;
                button.Size = new Size(0,0);
                button.AutoSize = true;
                groupBoxFlowLayout.Controls.Add(button);
            }

        }


    }

}

さまざまな幅にサイズ変更されたコントロールの3つのスクリーンショットを次に示します。

コントロールの3つのスクリーンシャットがさまざまな幅にサイズ変更されました

于 2013-01-29T18:55:19.090 に答える
0

「パネルにいくつのコントロールがあるかわかりません」とあなたは言います。設計時にFlowLayoutPanelにコントロールはありますか?そうでない場合、これは予想される動作のように聞こえます。Panelには何もないため、目的のサイズはゼロです。したがって、GroupBoxの目的のサイズはゼロです。

この場合、実行時に実際にコントロールを追加すると、すべてのサイズが大きくなることが期待されます。

于 2010-07-27T17:13:14.150 に答える
0

groupBoxのプロパティAnchor:Top、Bottom、Left、Rightを設定します。

于 2012-06-28T12:15:18.523 に答える