如何循环通过多个控件.控件



我需要循环所有表单中的所有控件

我这样做是因为我需要更改它们的一些属性,包括.BackColor

我试着做:

List<ControlCollection> listOfAllFormControlCollections = new List<ControlCollection>(new ControlCollection[] {
(ControlCollection)MachineProgrammer_form.instance.Controls,
(ControlCollection)BuildMachines_form.instance.Controls,
(ControlCollection)MainMenu_form.instance.Controls,
});
foreach (ControlCollection control in listOfAllFormControlCollections)
{
control.BackColor= Color.Blue;
}

但这并不奏效。

我该怎么做?

看看你在这里做了什么:

ControlCollection control

您已经将变量声明为类型ControlCollection,因此您显然知道它是什么,但随后将其命名为control,就好像这将神奇地将它变成一个具有BackColor属性的单个控件一样。不会的。对象是ControlCollection,即控件的集合。如果你想影响每个项目,你通常会对一组对象做什么?你在上面循环,你显然已经知道了,因为你已经有了这样的循环。

如果您有一个集合集合,那么您可以在外部集合上循环以访问每个内部集合,然后在该内部集合上循环来访问每个项。这就是你在现实世界中会做的事情,例如,如果我给你一些盒子,每个盒子里都有一些罐头,我告诉你在每个罐头上贴上价格标签。我们在现实世界中应用的逻辑与我们在编程时应用的逻辑相同。

foreach (var controlCollection in listOfAllFormControlCollections)
{
foreach (Control control in controlCollection)
{
control.BackColor = Color.Blue;
}
}

这将修复您的代码,但请记住,根据创建列表的方式,它只会影响每个表单类型的当前实例。如果用户关闭其中一个表单,然后打开另一个相同类型的表单,则新实例将不会选择新颜色。为此,您必须将新的Color值存储在某个位置,并让表单的构造函数获取该值并将其应用于新实例。

最新更新