Я создал образец на основе вашего представления.надеюсь, это поможет вам разобраться.Вы можете добавлять необходимые материалы по одному.
private Dictionary<string, FlowLayoutPanel> tracks = new Dictionary<string, FlowLayoutPanel>();
public TestFlowLayout()
{
InitializeComponent();
this.AutoScroll = true;
// for test
for (int i = 1; i <= 5; i++)
{
AddTrack("Track" + i.ToString());
for (int j = 1; j <= 10; j++)
{
AddButton("Track" + i.ToString(), "Button" + j.ToString());
}
}
}
public void AddTrack(string name)
{
FlowLayoutPanel panel = new FlowLayoutPanel();
panel.AutoSize = true;
panel.Dock = DockStyle.Top;
this.Controls.Add(panel);
tracks.Add(name, panel);
}
public void AddButton(string name, string caption)
{
Button button = new Button();
button.Text = caption;
tracks[name].Controls.Add(button);
}
В случае, если вам нужно отслеживать как группа за группой, вы можете немного изменить свой код
public void AddTrack(string name)
{
GroupBox group = new GroupBox();
group.Text = name;
group.Dock = DockStyle.Top;
group.AutoSize = false;
this.Controls.Add(group);
group.BringToFront();
FlowLayoutPanel panel = new FlowLayoutPanel();
panel.SizeChanged += Panel_SizeChanged;
panel.AutoSize = true;
panel.Dock = DockStyle.Top;
group.Controls.Add(panel);
tracks.Add(name, panel);
}
private void Panel_SizeChanged(object sender, EventArgs e)
{
FlowLayoutPanel panel = (FlowLayoutPanel)sender;
panel.Parent.Height = panel.Size.Height+20;
}