我有一个包含标签、按钮和图像的面板,我希望将它们放入流布局面板中。
正如一些教程中所见,我知道可以将新按钮和附加按钮自动对齐到流布局面板中。
我想问的是,是否可以将面板放在流布局面板中,并调用同一面板的多个实例以显示在流布局面板中。
我的面板代码是
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;
Run Code Online (Sandbox Code Playgroud)
那么是否可以将整个面板包含到一个流布局面板中?如果是,我该怎么做。谢谢你。
是的,您可以将面板放入 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; }
}
Run Code Online (Sandbox Code Playgroud)
另一种(可能更好)的方法是创建一个包含您的按钮/标签/等的 UserControl。而不是使用面板并手动添加所有控件。只需使用设计器创建并将 UserControl 的新实例添加到 FlowLayoutPanel。