在c#中更改表单内所有控件的颜色

use*_*364 4 c# winforms

在一个按钮单击事件中我想要更改表单颜色和表单内的所有控件颜色(文本框,标签,gridview,组合框),所以我给出了这样的代码:

  foreach (Control c in MyForm.Controls) {
    c.BackColor = Colors.Black;
    c.ForeColor = Colors.White;
}
Run Code Online (Sandbox Code Playgroud)

但这只是改变了标签和组合框的颜色.
无法更改表单和网格视图列标题.
组框标题颜色.
我怎么能改变颜色所有控件里面的形式
任何帮助是非常明显的...

Use*_*999 5

你必须使用递归函数

www.dotnetperls.com/recursion

类似的东西:

foreach (Control c in MyForm.Controls) 
{
   UpdateColorControls(c);
}


public void UpdateColorControls(Control myControl)
{
   myControl.BackColor = Colors.Black;
   myControl.ForeColor = Colors.White;
   foreach (Control subC in myControl.Controls) 
   {
       UpdateColorControls(subC);
   } 
}
Run Code Online (Sandbox Code Playgroud)

请注意,并非所有控件都具有属性ForeColorBackColor

更新

如果你不想例如只改变文本框:

public void UpdateColorControls(Control myControl)
{
   if (myControl is TextBox)
   {
       myControl.BackColor = Colors.Black;
       myControl.ForeColor = Colors.White;
   }
   if (myControl is DataGridView)
   {
      DataGridView MyDgv = (DataGridView)myControl;
      MyDgv.ColumnHeadersDefaultCellStyle.BackColor = Colors.Black;
      MyDgv.ColumnHeadersDefaultCellStyle.ForeColor = Colors.White;
   }

   // Any other non-standard controls should be implemented here aswell...

   foreach (Control subC in myControl.Controls) 
   {
       UpdateColorControls(subC);
   } 
}
Run Code Online (Sandbox Code Playgroud)