2009-09-29 50 views
0

我有16個按鈕,名稱爲button1,button2 ... etc 迭代它們的最佳方式是什麼,以及如何將這些按鈕存儲在數組或某物中?我想這樣做下面的:如何迭代按鈕變量

public void func(string[] a) 
{ 
    for(int i = 0; i<16;i++) 
    { 
      if(a[i]==something) 
       button[i].image = someImage; 
      else 
       button[i].image = antoherImage; 
    } 
} 
+0

您正在使用字符串數組(a [])中的值來確定按鈕數組中的圖像(按鈕[])。 []和按鈕[]之間的關聯是什麼? – 2009-09-29 10:57:14

+0

我寫這個例子。沒有字符串數組。事實上,我檢查數據庫中的一些值。 – EEE 2009-09-29 11:01:27

回答

6

最好的事情是坦言不是有16個不同的變量開始。相反,有一個數組:

Button[] buttons = new Button[16]; 

然後,您可以使用完全所需的語法(模數屬性名稱)。缺點是設計師並沒有真正滿足這一點。通常情況下,我發現如果我需要大量相同類型的UI元素,那麼以編程方式創建它們比在設計器中更容易,但這取決於具體情況。

另一種選擇是使用Controls["button" + (i + 1)],但是對我來說這感覺就像是一種破綻,當你真的只是想要一個數組。如果你沒有在任何時候需要重新分配變量,你使用:

Button[] buttons = new Button[16]; 
for (int i = 0; i < 16; i++) 
{ 
    buttons[i] = (Button) Controls["button" + (i + 1)]; 
} 

,從那時起就可以使用buttons陣列...

你當然可以這樣做,而不是:

Button[] buttons = { button1, button2, button3, button4, button5, ... }; 
+0

感謝您的回覆。我的按鈕是以窗體的形式出現的,每個按鈕都是獨立的對象。我如何將這些添加到數組? – EEE 2009-09-29 10:40:28

+0

@EEE:爲什麼您必須單獨創建它們才能開始?如果你可以從數組開始,那很可能是最好的選擇。 – 2009-09-29 10:43:09

+0

我想用「Controls [」按鈕「+(i + 1)]」就是我想要的。我不知道要達到這樣的控制。非常感謝你。 – EEE 2009-09-29 11:03:25

1

您可以輕鬆地使用Controls()做到這一點 - 容器收集:

foreach(Control ctrl in Me.Controls()) { 
    if(ctrl.Name.Startswith("Button")) { 
     //do something 
    } 
} 

由此您可以訪問容器中的每個控件,也可以將其轉換爲不同的類型,然後檢查您的狀況。

Bobby