在c#中更改表单内所有控件的颜色
本文关键字:控件 颜色 表单 | 更新日期: 2023-09-27 17:57:33
在一键点击事件中,我想更改表单颜色和表单内的所有控件颜色(文本框、标签、网格视图、组合框),所以我给出了这样的代码:
foreach (Control c in MyForm.Controls) {
c.BackColor = Colors.Black;
c.ForeColor = Colors.White;
}
但这只是改变标签和组框的颜色
无法更改窗体和网格视图列标题
分组框标题颜色
如何更改表单中所有控件的颜色
任何帮助都是非常可观的。。。
您必须使用递归函数
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);
}
}
请注意,并非所有控件都具有属性ForeColor
和BackColor
更新
例如,如果你不想只更改文本框:
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;