交替阵列元素

时间:2014-01-20 23:36:22

标签: c# winforms

我有以下方法:

for (int i = 0; i < 10; i++)
{
    if (button[i].BackColor == Color.GreenYellow) // if button colour is GreenYellow              
      {
         button[i].BackColor = Color.Beige;       // change to beige     
         break;
      }

    else if (button[i].BackColor == Color.Beige)  // if button is already beige
      {
         button[i + 1].BackColor = Color.Beige;   //skip current button and change next button to beige
         break;
      }
}

该方法有效,但不是我打算工作的方式。在代码的else if部分,我想要的是,如果按钮颜色已经是Beige,则跳过下一个按钮中的当前按钮和颜色。

问题是它只适用于前2个按钮,然后对接下来的8个按钮无效。任何人都可以解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

试试这个。

int i = 0;
while (i < 10)
{
    if (button[i].BackColor == Color.GreenYellow) // if button colour is GreenYellow              
    {
        button[i].BackColor = Color.Beige;       // change to beige     
        i++;
    }   
    else if (button[i].BackColor == Color.Beige)  // if button is already beige
    {
        button[i + 1].BackColor = Color.Beige;   //skip current button and change next button to beige
        i+=2;
    }
}

答案 1 :(得分:0)

删除Break

for (int i = 0; i < 10; i++)
{
    if (button[i].BackColor == Color.GreenYellow) // if button colour is GreenYellow              
      {
         button[i].BackColor = Color.Beige;       // change to beige     

      }

      else if (button[i].BackColor == Color.Beige)  // if button is already beige
      {
         button[i + 1].BackColor = Color.Beige;   //skip current button and change next button to beige
         i += 1;

      }
}

答案 2 :(得分:0)

不确定您的问题是否希望所有按钮都以这种方式运行,或者仅仅是1到10之间的数组。如果是前者,您可以使用:

    var buttons = this.Controls.Cast<Control>()
        .Where(b => b.GetType() == typeof(Button) && b.BackColor != Color.Beige)
        .ToList();

    buttons.ForEach(b => b.BackColor = Color.Beige);

否则,你会想要坚持彼得发布的方法。