C# 通过按另一个按钮对一些按钮进行分组以交替其背景色

C# 通过按另一个按钮对一些按钮进行分组以交替其背景色,c#,winforms,C#,Winforms,好的,我有一个正方形的100个按钮。以及外部的其他功能按钮(退出/清除/填充按钮等)。 “清除”按钮会将表单底色上的所有按钮变为浅灰色,而“填充”按钮会将表单底色上的所有按钮变为浅蓝色 private void btnClear_Click(object sender, EventArgs e) { foreach (Control ctrl in this.Controls) if (ctrl is Button &&am

好的,我有一个正方形的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个按钮有效,而不是其他按钮。我可以使用面板/分组框吗?或者制作一组按钮?只参考那些按钮?我显然是新手,所以任何建议,尤其是代码都会非常有用:)

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


例如,您可以将按钮放入一个面板中,然后您可以修改代码以引用
panel1。控件
而不是
此控件。控件

因为它们已经在一个大正方形中,所以应该很容易按照您的建议将它们全部移动到面板中,然后仅更改面板内的控件,而不是整个窗体

您可以删除
ctrl is按钮
复选框,因为面板中唯一的控件是按钮

此外,在更改按钮之前,您不需要检查按钮的当前背景色,除非您试图避免运行的
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;
var myButtons=newlist();
myButtons.Add(someButton);//添加按钮
foreach(我的按钮中的var btn)
btn.BackColor=Color.LightBlue;