2014-11-20 75 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