2014-01-20 81 views
0

我有下面這個方法:交替數組元素

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個按鈕這樣做。有誰能解決這個問題嗎?

回答

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; 

     } 
} 
+0

這會產生多米諾骨牌效應。如果你打米色,一切到最後都會變成米色。不確定OP是否想要。 –

+0

我已經編輯了我的答案。感謝指出。 –

+0

在這裏,當你點擊一件米色物品時,你可以在循環中將'i'增加三個。 – Servy

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; 
    } 
} 
+0

在這裏你在每個循環中增加三個「i」。 – Servy

+0

@Servy你是對的,修復。 –

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); 

否則,會想要堅持Peter發佈的方法。