Как поместить панель кнопок в панель макета потока? - PullRequest
3 голосов
/ 01 ноября 2011

У меня есть панель меток, кнопок и изображений, которые я хочу поместить в панель макета потока.

Как видно из некоторого учебника, я понимаю, что можно автоматически выровнять новые и дополнительные кнопки на панели макета потока.

Я хотел бы спросить, можно ли поместить панель внутри панели макета потока и вызвать несколько экземпляров одной и той же панели для отображения на панели макета потока.

Мой код панели будет

        this.panelNotification.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
        this.panelNotification.Controls.Add(this.button1);
        this.panelNotification.Controls.Add(this.lblImage);
        this.panelNotification.Controls.Add(this.lblName);
        this.panelNotification.Controls.Add(this.lblLinkName);
        this.panelNotification.Controls.Add(this.lblLinkLocation);
        this.panelNotification.Controls.Add(this.lblLocation);
        this.panelNotification.Location = new System.Drawing.Point(3, 3);
        this.panelNotification.Name = "panelNotification";
        this.panelNotification.Size = new System.Drawing.Size(506, 100);
        this.panelNotification.TabIndex = 17;

Так можно ли включить всю панель в панель макета потока? если да, то как мне это сделать. спасибо.

1 Ответ

4 голосов
/ 01 ноября 2011

Да, вы можете поместить Panel в панель FlowLayoutoutPanel.Нет, вы не можете поместить элемент управления несколько раз в FlowLayoutoutPanel (на самом деле вы можете, но он отображается только один раз).

Но то, что вы могли бы сделать, это написать какой-то Factory-метод, который создаетновая панель с новыми кнопками / метками / другими элементами управления и т. д. каждый раз, когда вы вызываете ее, и добавляете эти новые экземпляры в вашу панель FlowLayout.Примерно так:

public class Form1
{
    private Panel CreateNotificationPanel()
    {
        var p = new Panel { BackColor = Color.Red };
        p.Controls.Add(new Button { Text = "Test" });
        return p;
    }

    private void Form1_Load(System.Object sender, System.EventArgs e)
    {
        var flp = new FlowLayoutPanel { Dock = DockStyle.Fill };

        flp.Controls.Add(CreateNotificationPanel());
        flp.Controls.Add(CreateNotificationPanel());
        flp.Controls.Add(CreateNotificationPanel());

        this.Controls.Add(flp);
    }

    public Form1() { Load += Form1_Load; }
}

Другой (и, вероятно, лучший) подход заключается в создании UserControl, который содержит ваши кнопки / метки / и т.д.вместо использования панели и добавления всех элементов управления вручную.Просто создайте с помощью Designer и добавьте новые экземпляры UserControl в FlowLayoutPanel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...