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

本文关键字:控件 颜色 表单 | 更新日期: 2023-09-27 17:57:33

在一键点击事件中,我想更改表单颜色和表单内的所有控件颜色(文本框、标签、网格视图、组合框),所以我给出了这样的代码:

  foreach (Control c in MyForm.Controls) {
    c.BackColor = Colors.Black;
    c.ForeColor = Colors.White;
}

但这只是改变标签和组框的颜色
无法更改窗体和网格视图列标题
分组框标题颜色
如何更改表单中所有控件的颜色
任何帮助都是非常可观的。。。

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

您必须使用递归函数

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);
   } 
}

请注意,并非所有控件都具有属性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);
   } 
}

您可以检查控件的类型,并对特定控件执行不同的操作。例如数据网格视图:

if (c.GetType().ToString().IndexOf("DataGridView") != -1)
{
  DataGridView dgv = (DataGridView)c;
  dgv.DefaultCellStyle.ForeColor = Color.Red;
}

根据控件类型的不同,背景颜色属性有不同的名称。例如,标签背景位于名为"BackColor"的属性后面,数据网格使用名称"BackgroundColor"。

您可以使用此代码作为着色的基础。DataGridView作为"异常"处理:

// Loop each control
foreach (Control control in this.Controls)
{
   if (control is DataGridView) { ((DataGridView)control).BackgroundColor = Color.Red; }
   // else if (control is ...) { ... }
   // Everything else is colored by using property "BackColor"
   else { control.BackColor = Color.Red; }
}

如果需要,添加更多"else-if"。您需要使用强制转换,因为Visual Studio不知道控件的类型。

 var Hex_SET5_Red = DimGray;
            var Hex_SET5_Yellow = Black;
            var Hex_SET5_OrangeRed = Silver;
            var Hex_SET5_Maroon = Black;
            //Transfer String to Hex Colour
            var UseAble_Hex5_Red = System.Drawing.ColorTranslator.FromHtml(Hex_SET5_Red);
            var UseAble_Hex5_Yellow = System.Drawing.ColorTranslator.FromHtml(Hex_SET5_Yellow);
            var UseAble_Hex5_OrangeRed = System.Drawing.ColorTranslator.FromHtml(Hex_SET5_OrangeRed);
            var UseAble_Hex5_Maroon = System.Drawing.ColorTranslator.FromHtml(Hex_SET5_Maroon);
            //Filling the Panels with colors
            pnl17.BackColor = UseAble_Hex5_Red;
            pnl18.BackColor = UseAble_Hex5_Yellow;
            pnl19.BackColor = UseAble_Hex5_OrangeRed;
            pnl20.BackColor = UseAble_Hex5_Maroon;

//访问https://www.youtube.com/watch?v=MSLzDm1fXQo&ab_channel=NAASSOFT

对于DataGridView:在将此EnableHeadersVisualStyles更改为false:之前,我无法成功更改DataGridView列标题颜色

if (myControl is DataGridView)
            {
                DataGridView MyDgv = (DataGridView)myControl;
                MyDgv.EnableHeadersVisualStyles = false;
                MyDgv.ColumnHeadersDefaultCellStyle.BackColor = themebackcolor;
                MyDgv.ColumnHeadersDefaultCellStyle.ForeColor = themeforecolor;