如何使用已经在FlowLayoutPanel内部的面板内部的控件?

时间:2018-11-12 17:31:09

标签: c# winforms

我正在创建一个视图,类似于视频制作工具中的时间轴。
我正在使用FlowLayoutPanel,它将包含所有其他垂直类型的“音轨”。
每个“轨道”都是一个包含按钮的FlowLayoutPanelFlowLayoutPanel是整个Form的一个。
FlowLayoutPanels包含我从代码动态生成的按钮。

现在我的代码可以在FlowLayoutPanel内一个一个地生成FlowLayoutPanels。
但是,如何使用在主FlowLayoutPanel内部添加的生成的FlowLayout面板和控件进行工作(调整大小,删除,更改内容)?

enter image description here

1 个答案:

答案 0 :(得分:0)

我已经根据您的观点创建了一个示例。希望这可以帮助您清除它。您可以一一添加所需的东西。

    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;
    }