2014-11-20 42 views
-3

我有超過20個文本框設置,我試圖做的是從每個值中取出值並將其放入一個值(結構)數組中。我的每個文本框的名稱都是txtScore00,01,02等等,我試圖用計數器循環它們,並使用計數器作爲變量名中的數字。我發現這個話題Concatenate Variable Names in VB,但我仍然無法得到它的工作。有什麼建議麼?我的代碼填充數組:在.Net中傳遞的變量名的連接VB

For intCountOne = 0 To aStudent.Length - 1 
     For intCountTwo = 0 To aStudent(intCountOne).decGrade.Length - 1 
      aStudent(intCountOne).decGrade(intCountTwo) = Me.Controls("tbScore" & intCountOne & intCountTwo).Text 
+2

你爲什麼要刪除您的密碼? – 2014-11-20 21:57:38

+0

試圖添加4個空格,使其看起來像一個代碼,並沒有工作,不想讓問題看起來像垃圾 – LittleB0Y 2014-11-20 21:58:18

+0

@ LittleB0Y,離開代碼,其他人將編輯它,使其看起來不錯。 – 2014-11-20 21:58:56

回答

1

您有:

Me.Controls("tbScore" & intCountOne & intCountTwo) 

這就要求文本框是由窗體包含直接。如果它們位於不同的容器中,如Panel,則需要將「Me」更改爲容器的名稱(如「Panel1」)。

或者,您可以搜索帶有該名稱的控件的表單,如果TextBoxes分佈在多個容器(如果它們都在同一個容器中,它仍然可以工作),這非常有用。

這裏有一個簡單的例子:

Dim matches() As Control 
    For intCountOne = 0 To aStudent.Length - 1 
     For intCountTwo = 0 To aStudent(intCountOne).decGrade.Length - 1 
      matches = Me.Controls.Find("tbScore" & intCountOne & intCountTwo, True) 
      If matches.Length > 0 AndAlso TypeOf matches(0) Is TextBox Then 
       Dim tb As TextBox = DirectCast(matches(0), TextBox) 
       aStudent(intCountOne).decGrade(intCountTwo) = tb.Text 
      End If 
     Next 
    Next 
+0

知道了,問題是我在一個組框中循環了所有內容,擺脫了它並完美地工作 – LittleB0Y 2014-11-20 23:08:28

+0

是的......可能是因爲我說過的原因。我猜你已將控件從GroupBox移到了Form中?如果你使用上面發佈的代碼,那麼它們在哪個容器中並不重要,因爲它們總是被找到。 – 2014-11-20 23:13:05