Как работать с элементами управления внутри панелей, которые уже находятся внутри FlowLayoutPanel? - PullRequest
0 голосов
/ 12 ноября 2018

Я создаю вид, что-то вроде временной шкалы в инструментах для создания видео.
Я использую FlowLayoutPanel, который будет содержать все мои дополнительные "треки" в вертикальном типе.
Каждый «трек» - это FlowLayoutPanel, который включает в себя кнопки. FlowLayoutPanel - это единое целое Form.
FlowLayoutPanels включают кнопки, которые я генерирую динамически из кода.

Теперь мой код может генерировать FlowLayoutPanels внутри FlowLayoutPanel один за другим.
Но как я могу работать (изменять размеры, удалять, изменять содержимое) с созданными панелями FlowLayout и элементами управления, которые я добавляю в main FlowLayoutPanel?

enter image description here

1 Ответ

0 голосов
/ 13 ноября 2018

Я создал образец на основе вашего представления.надеюсь, это поможет вам разобраться.Вы можете добавлять необходимые материалы по одному.

    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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...