2010-09-22 49 views
0

比方說,我有將WinForm標籤放入數組中?

Label1 
Label2 
Label3 

我想要做的事,如:

for(int i=0;i<3;i++) 
{ 
    LabelArray[i].Text = "weee!"; 
} 

要填充陣列,我知道我可以這樣做:

LabelArray[0] = Label1; 
LabelArray[1] = Label2; 
LabelArray[2] = Label3; 

但是,沒有按因爲我有50個標籤,這看起來很聰明,而這將是50個愚蠢的代碼行。

有沒有更好的方法來做到這一點?

謝謝!

回答

2

您必須遍歷Form.Controls[]才能找到標籤。

foreach (var control in this.Controls) 
{ 
    if (control is Lable) 
     labelList.Add((Lable)control)); 
} 
0

如果以編程方式創建標籤,則可以創建標籤並在for循環中設置文本,然後將其添加到窗體控件集合中。

如果您在設計時添加了50個標籤,這樣他們可以獲得50個單獨的名稱,那麼我不知道任何更好的解決方案。

如果您想要設置所有標籤的文本,您還可以遍歷表單的Controls集合,並檢查它們是否爲Label類型,如果是,請設置它們的文本屬性。

0

你有兩個選擇:

  • 使用反射來獲取標籤,例如

    for (int i = 0; i < 50; i++) 
        labelArray[i] = (Label)GetType().GetField("Label" + (i+1)).GetValue(this); 
    
  • 不要使用的WinForms設計師創造了50個標籤,但動態地創建他們,並把他們直入在首位的陣列。

+0

您的反射代碼不起作用,但我不知道如何解決它。特別是「GetType()」和「this」被標記爲錯誤。 – sooprise 2010-09-22 13:40:56

+0

好吧,這些錯誤似乎源於這樣的事實,即代碼是在一個靜態方法... – sooprise 2010-09-22 13:43:39

+0

@Soo:正確。例如,如果標籤集在運行時不會更改,則可以將其放入窗體的構造函數中。 – Timwi 2010-09-22 13:44:54