试图制作一个按钮,重置所有其他按钮背景颜色

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

标签: c# winforms

我有100个10x10平方的按钮,点击时会改变颜色。

        private void alternateColor(Control ctrl)
    {
        switch (ctrl.BackColor.Name)
        {
            case "LightGray":
                ctrl.BackColor = Color.LightBlue;
                break;
            default:
                ctrl.BackColor = Color.LightGray;
                break;
        }
    }
    private void matrixButtonClick(object sender, MouseEventArgs e)
    {
        alternateColor(sender as Control);              
    }

我想要一个按钮,将每个已经变为浅蓝色的按钮重置为浅灰色。任何帮助将不胜感激

    private void btnClear_Click(object sender, EventArgs e)
    {
        ????
    }

2 个答案:

答案 0 :(得分:0)

我可以想到几种方法:

  1. 遍历conatainer中的孩子,选择每个按钮并设置它的颜色
  2. 使用您在创建时订阅每个按钮的事件/ IObservable,并通知按钮更改颜色
  3. 使用viewmodel(MVVM)
  4. 改进2

    列表按难度排序,但后面的列表给你更好的设计,根据你的问题,我建议至少2个

    PS:我不能给你一些有意义的代码,如果我不知道你在那里做了什么 - 如果我能看到更多你的代码/定义,我会添加一些。

答案 1 :(得分:0)

您可以使用linq过滤具有特定背景颜色的按钮。您可以使用Enumerable.OfType获取按钮类型的控件,并使用Enumerable.Where方法过滤BackColor名称等于LightBlue的按钮

//Get the button in form with LightBlue back color.
var formLightBlueButton = form1.Controls.OfType<Button>()
                         .Where(b=>b.BackColor == Color.LightBlue);

//Changing the color of buttons
foreach(var button in formLightBlueButton)
      button.BackColor = Color.LightGray;

编辑 使用foreach循环来获取和设置按钮属性,而不是使用LINQ似乎更合适。只需使用is运算符来过滤按钮并更改背景颜色。

foreach(Control ctrl in this.Controls)
   if (ctrl is Button && ctrl.BackColor == Color.Maroon)
       ctrl.BackColor = Color.LightGray;