无法使用foreach循环访问表单上的所有控件

时间:2017-10-15 06:16:27

标签: c# winforms

我试图在我的C#应用​​程序中引入颜色主题,就像在visual studio中一样

表单上有多个面板,每个面板中都有多个控件,如(groupbox,label,textboxes,panels)。现在考虑以下代码:

if(ctrl is Panel){ (ctrl as Panel).BackColor = Color.FromArgb(214, 219, 233); } 

问题是

[t,s]=ode45(ODE1,[0,2],[0,0,0,0]);

更改表单上主面板的 backcolor ,但它也不会更改该面板和其他控件中面板的颜色

1 个答案:

答案 0 :(得分:0)

Statement expected, found Py:PRINT_KEYWORD仅返回控制的直接子节点(在这种情况下为this.Controls),因此不会返回这些子节点的子节点。要遍历Form上的所有控件,您可以使用这样的递归:

Form

或者你可以创建private void button1_Click(object sender, EventArgs e) { SetBackColorRecursively(this); } private void SetBackColorRecursively(Control ctrl) { if (ctrl is Panel) { (ctrl as Panel).BackColor = Color.FromArgb(214, 219, 233); } if (ctrl is GroupBox) { (ctrl as GroupBox).BackColor = Color.FromArgb(214, 219, 233); } // Recursively set BackColor on all children foreach (Control c in ctrl.Controls) { SetBackColorRecursively(c); } } 方法,它将枚举所有控件,包括祖母:

Flatten