通过公式更改所有按钮的背景色

时间:2019-02-27 16:23:35

标签: c# winforms

我创建了一个名为 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上正常工作,并且按钮根本不起作用

1 个答案:

答案 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-