我创建了一个名为 Design
包含此代码
public static void Edit(Form frm, Color bkColor, Color btnColor,Color pnlColor)
{
frm.BackColor = bkColor;
frm.RightToLeft = RightToLeft.Yes;
frm.RightToLeftLayout = true;
foreach (Button btn in frm.Controls.OfType<Button>())
{
btn.BackColor = btnColor;
}
foreach (Panel pnl in frm.Controls.OfType<Panel>())
{
pnl.BackColor = pnlColor;
}
}
我以这种方式称呼它:
Design.Edit(this, Color.Blue, Color.Green, Color.Yellow);
现在,它可以在面板上的表单背景BUT上正常工作,并且按钮根本不起作用
答案 0 :(得分:0)
您需要在表单的所有控件中对控件进行搜索搜索。 看一下that accepted answer,它实现了一种非常好的游览方法。
这样做:
frm.Controls.OfType<Button>()
您仅在表单控件的第一层中进行搜索,因此,如果您在面板或其他元素(占情况的99,999999%)内有一个按钮,则foreach找不到它。
在您的问题上适应已接受的答案:
public IEnumerable<Control> GetAll(this Control control,Type type)
{
var controls = control.Controls.Cast<Control>();
return controls.SelectMany(ctrl => ctrl.GetAll(type))
.Concat(controls)
.Where(c => c.GetType() == type);
}
[...]
foreach (Button btn in frm.GetAll(typeof(Button)))
{
btn.BackColor = btnColor;
}
L-