[英]How to add a single instance of Panel multiple time to a single FlowLayoutPanel(C# desktop application)?
我有一个应用程序,我想将面板的单个实例多次添加到单个 FlowLayoutPanel 实例中。 因此,如果我更改单个 Panel 实例的背景颜色,它将对所有视图生效。
单个实例意味着在整个应用程序中仅存在该确切实例中的一个。 一个控件只能有一个所有者,不能有多个所有者。
因此,单个实例不能与多个所有者一起存在,因此无法执行此操作。
但是,根据您的描述,这也不是必需的。 您不希望单个实例同时让多个控件以相同的方式运行。 因此,将所有面板存储在列表或数组中,然后迭代它们并在需要时应用新的背景颜色。 像这样。
//Create a list on your form level.
private List<Panel> PanelList { get; set; }
//Store a list of Panels. You can also add them manually.
//Do this after initialisation of your form and all controls are added.
this.PanelList = this.Controls.OfType<Panel>().ToList();
//When required, call this method
private void UpdatePanelBackgroundColor(Color backColor)
{
foreach (var panel in this.PanelList)
panel.BackColor = backColor;
}
您可以尝试以下代码将面板多次添加到单个 FlowLayoutPanel。
另外,我编写了更改 FlowLayoutPanel 中背景颜色的代码。
代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private Panel CreateNotificationPanel()
{
var p = new Panel { BackColor = Color.Red };
p.Controls.Add(new Button { Text = "Test" });
return p;
}
FlowLayoutPanel flp = new FlowLayoutPanel { Dock = DockStyle.Fill };
private void Form1_Load(object sender, EventArgs e)
{
flp.Controls.Add(CreateNotificationPanel());
flp.Controls.Add(CreateNotificationPanel());
flp.Controls.Add(CreateNotificationPanel());
this.Controls.Add(flp);
}
private void button1_Click(object sender, EventArgs e)
{
var result = flp.Controls.OfType<Panel>().ToList();
foreach (var item in result)
{
item.BackColor = Color.Yellow;
}
}
}
结果:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.