通过按另一个按钮将某些按钮分组以交替其背景颜色

时间:2014-07-04 03:14:05

标签: c# winforms

好的,我有一个正方形的100个按钮。以及其他功能按钮(退出/清除/填充按钮等)。 清除按钮会将表单上的所有按钮变为浅灰色,填充按钮会将表单上的所有按钮变为背景颜色。

        private void btnClear_Click(object sender, EventArgs e)
    {
        foreach (Control ctrl in this.Controls)
            if (ctrl is Button && ctrl.BackColor == Color.LightBlue)
                ctrl.BackColor = Color.LightGray;               
    }

    private void btnFill_Click(object sender, EventArgs e)
    {
        foreach (Control ctrl in this.Controls)
            if (ctrl is Button && ctrl.BackColor == Color.LightGray)
                ctrl.BackColor = Color.LightBlue;
    }

我希望清除和填充按钮仅适用于方形中的100个按钮而不是其他按钮。我可以使用面板/组合框吗?或制作按钮集合?某种程度上只参考那些按钮?我显然很新,所以任何建议,尤其是代码都会非常有用:)

2 个答案:

答案 0 :(得分:1)

由于他们已经在一个大的广场上,所以应该很容易将它们全部移动到您建议的Panel中,然后只更改Panel内的控件而不是整个Form。

您可以删除ctrl is Button支票,因为面板中的唯一控件是按钮。

此外,在更改按钮之前,您不需要检查按钮的当前BackColor,除非您在BackColorChanged事件中发生了一些您正在尝试的事情。避免跑步。

private void btnClear_Click(object sender, EventArgs e)
{
    foreach (var ctrl in pnlButtons)
        ctrl.BackColor = Color.LightGray;               
}

private void btnFill_Click(object sender, EventArgs e)
{
    foreach (Control ctrl in pnlButtons)
        ctrl.BackColor = Color.LightBlue;
}

或者,您可以将要更改的按钮存储在列表中。如果您已经在运行时生成按钮,这应该很容易。

var myButtons = new List<Button>();

myButtons.Add(someButton);  // add buttons

foreach(var btn in myButtons)
    btn.BackColor = Color.LightBlue;

答案 1 :(得分:0)

是的,您可以使用面板或组框。

例如,您可以将按钮放入面板,然后您可以修改代码以引用panel1.Controls而不是this.Controls