2016-10-06 27 views
1

我想使用標籤數組,但它不工作,我不知道我在想什麼。 這裏是我試圖去工作代碼:標籤數組不工作c#

for (int x = 1; x <= 10; x++) 
{ 
    Label[] label1 = new Label[10]; 
    label1[x] = new Label(); 
    label1[x].AutoSize = true; 
    label1[x].Text = "text"; 
    label1[x].Left +=10; 
    label1[x].Top +=10; 
} 
+2

除了吉拉德格林的觀點,如果你真的希望這些標籤出現在用戶界面的某處,他們必須被添加到我控制的'Controls'集合。 – adv12

+1

另外,你的循環中有1個錯誤。您在標籤[0]中沒有任何內容,則標籤[10]不存在。看來吉拉德的回答已經解決了這個問題。 – KSib

+0

@TésztaSajtos - 這次有可能從代碼中瞭解問題,但下次請當你說「不工作」時指定出了什麼問題:異常,意外的行爲/輸出.... –

回答

10

要初始化在每次迭代中新Label1數組,所以你最終將有隻在最後一個地方是最後一個與1項。

移動label1外循環的聲明:

//Move this line outside of the loop's scope 
Label[] label1 = new Label[10]; 

//Loop from 0 to the Length of the array instead of repeating 10 again 
for (int x = 0; x < label1.Lenth; x++) 
{ 
    label1[x] = new Label(); 
    label1[x].AutoSize = true; 
    label1[x].Text = "text"; 
    label1[x].Left +=10; 
    label1[x].Top +=10; 
} 

我建議您在MSDN看看如何使用數組:

4

爲了避免這樣的錯誤(錯誤填寫) ,嘗試生成陣列:

int n = 10; 

Label[] label1 = Enumerable 
    .Range(0, n) 
    .Select(x => new Label() { 
    AutoSize = true, 
    Text = "text", 
    Left = x * 10, 
    Top = x * 10, 
    }) 
    .ToArray(); 
+1

我喜歡linq這是一個很好的工具,但我認爲對於這個級別的這種情況,這個解決方案是一個矯枉過正的..這是相當基本的數組處理知識 –

+0

似乎是一個足夠好的答案,但它肯定是一個假定的初學者有點多。 – KSib

+1

這種解決方案(生成)允許忘記*數組創建*,*索引範圍*;例如問題中的代碼在'(for ... x <= 10 ...)'和'array'中創建'new Label [10]'時使用'10'作爲*幻數*錯誤的索引(基於1的代替零基於)等。 –