我该如何将一个按钮面板放置在流式布局面板中?

3

我有一个标签、按钮和图片的面板,希望将它们放入流动布局面板中。

正如一些教程所示,我理解可以将新的和附加的按钮自动对齐到流布局面板中。

我想问的是是否可以将一个面板放在流布局面板内,并调用多个相同面板的实例,使其出现在流布局面板中。

我的面板代码如下:

        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
旁注:你应该接受那些帮助过你的问题答案,因为有些人如果你不接受答案就不会回答你的问题。 - sloth
哦,抱歉。我还是对这个StackOverflow不太熟悉。我会注意的!谢谢! - Thomas
1个回答

5

是的,你可以将一个面板放入FlowLayoutoutPanel中。

不行的是,你不能多次将控件放入FlowLayoutoutPanel中(实际上你可以这样做,但它只会显示一次)。

但你可以编写某种工厂方法,每次调用该方法时创建一个新的带有新按钮/标签/其他控件等的面板,并将这些新实例添加到你的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; }
}

另一种(也许更好的)方法是创建一个包含按钮/标签等控件的用户控件,而不是使用面板并手动添加所有控件。只需使用设计器创建并将用户控件的新实例添加到FlowLayoutPanel中。


哦,那我应该如何编写一个创建带有所有这些按钮的新面板的方法呢?我需要在main.cs文件中编写代码吗?你能给我展示一个小样例吗?谢谢! - Thomas
嗨,感谢提供代码。对于 createNotificationPanel 方法,我如何指定按钮的位置?我如何指定 flp 出现的位置?谢谢! - Thomas
你可以使用设计器创建一个UserControl,而不是使用创建Panel的方法。这将是最简单的方法。 - sloth
很抱歉,我对使用Visual Studio进行C#编程仍然比较新。请问您的意思是什么?如果我只是在main.cs中创建一个具有由我指定的按钮和位置的面板实例,这会给我带来麻烦吗? - Thomas
1
如果您想指定绝对位置,请使用面板的Location属性来设置位置。 - sloth
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接