2013-01-24 97 views
2

我想下面的代碼:動態控制名稱

for (int i = 0; i < students.Length; i++) 
{ 
    "student" + i.ToString().Text = students[i]; 
} 

我已經有其中每個人都有喜歡的名字很多標籤: student1 STUDENT2 學生三 。 。

但是我得到這個錯誤: 錯誤1'字符串'不包含'文本'的定義,沒有擴展方法'文本'接受類型'字符串'的第一個參數可以找到(你是否缺少一個使用指導或裝配參考?)F:\作業\作業\ Form1.cs 161 46作業

任何幫助,請?? ??

回答

8

您不能擁有動態變量名稱,只需約任何語言。

看起來好像你正在尋找一個集合array控件。

喜歡的東西:

var studentControls = new List<Control>(); 
studentControls.Add(student1); 
studentControls.Add(student2); 
... 
for (int i = 0; i < students.Length; i++) 
{ 
    studentControls[i].Text = students[i]; 
} 
3

使用Controls.Find( 「學生」 + i.ToString())

+0

可能會或可能無法工作,這取決於這是什麼平臺(winforms?webforms?WPF?Windows phone?) – Oded

+0

F:\ Homework \ Homework \ Form1.cs 161 46家庭作業 - Form1.cs - 我想它WinForms –

3

這可能有助於

Controls.Find(string.Format("student{0}", i)); 

更好的解決方案:

設置y的Tag屬性OU Labels如下:

Student1.Tag = 1; 
Student2.Tag = 2; 
Student3.Tag = 3; 

我假設你Labels是在名爲container容器控件。使用此代碼:

foreach(var item in container.Children) //based on your container type this line may change 
{ 
    if(item is Label) 
    { 
     Label temp = ((Label)item); 
     temp.Text = students[int.Parse(temp.Tag.ToString())] 
    } 
} 
+0

您可以省略.ToString()方法,因爲string.Format默認使用它。 – krajew4

+0

是的,你是對的 –

+0

這隻適用於winforms,不適用於webforms或WPF。 – Oded

0

這樣做i.ToString()給你一個字符串,它不具有屬性Text :)。那是什麼導致你的例外。

如果Students是具有財產.Text然後使用和刪除ToString()否則,取出.Text控制列表。