フローレイアウトパネルを保持するグループボックスがあり、フローレイアウトパネルは一連のコントロールを保持します。フローレイアウトパネルを親とドッキングするように設定しました。パネルにいくつのコントロールがあるかわからないので、グループボックスの自動サイズをtrueに設定し、自動サイズモードを拡大および縮小に設定しました。これを行うと、グループボックスは空のように縮小します。グループボックスを削除できないように、キャプションが必要です。なぜこれが起こっているのか誰もが知っていますか?
4 に答える
FlowLayoutPanelがゼロに縮小するのを妨げるものは何もありません。少なくとも、AutoSizeプロパティもTrueに設定する必要があります。
今日も同じことをしようとしていました。以下は、私が思いついた解決策です。これは、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つのスクリーンショットを次に示します。
「パネルにいくつのコントロールがあるかわかりません」とあなたは言います。設計時にFlowLayoutPanelにコントロールはありますか?そうでない場合、これは予想される動作のように聞こえます。Panelには何もないため、目的のサイズはゼロです。したがって、GroupBoxの目的のサイズはゼロです。
この場合、実行時に実際にコントロールを追加すると、すべてのサイズが大きくなることが期待されます。
groupBoxのプロパティAnchor:Top、Bottom、Left、Rightを設定します。