如何将一组按钮放入流程布局面板?

时间:2011-11-01 14:53:03

标签: c# user-interface

我有一组标签,按钮和图像,我希望将其放入流程布局面板中。

如某些教程所示,我了解可以将新的和其他按钮自动对齐到流布局面板中。

我想问的是,是否可以在流布局面板中放置一个面板,并调用同一面板的多个实例以显示在流布局面板中。

我的面板代码是

        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 个答案:

答案 0 :(得分:4)

是的,您可以将Panel放入FlowLayoutoutPanel。 不,你不能多次将控件放入FlowLayoutoutPanel(事实上你可以,但它只显示一次)。

但你可以做的是编写某种Factory-Method,每次调用它时都会创建一个带有新按钮/标签/其他控件等的新面板,并将这些新实例添加到FlowLayoutpanel中。像这样:

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。