即时通讯有一个语法问题,在for循环中从6个文本框中提取相同名称(最后一个数字除外)的数据

时间:2011-09-14 09:29:13

标签: vb.net

我有6个不同的文本框,名称相似:

txtBox1, txtBox2....txtBox6

我也有一个阵列:

dim intValue (0 to 5) as Integer

现在我想使用for循环将每个文本框中的值分配给数组中的相应空格,将循环计数器的值与字符串“txtBox”连接起来,并使用检索数据。文本方法。
这是我的代码:

 For count As Integer = 0 To 5
            Dim strCount As String = count
            Dim strTxtBox As String = "txtBox" & strCount
            intValues(count) = Convert.toInt32(strTxtBox.Text)
        Next 


问题是字符串名称不指向txtBox1,txtBox 2等。

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

如果要访问控件名称,则必须使用“名称”属性。

你应该尝试类似的东西:

    For i As Integer = 0 To 5
        For Each c As Control In Controls
            If c.Name = "txtBox" & i Then
                intValue(i) = Convert.ToInt32(c.Text)
            End If
        Next
    Next i

上面的代码只是一个例子,但它应该适合你。 无论如何,您可以编写更好的代码来检查控件的类型,或者使用不同的循环逻辑,但基本的想法是,如果您想在代码中使用控件的名称,则必须使用NAME属性。

答案 1 :(得分:1)

strTxtBox是一个字符串,仅此而已。如果没有特殊代码,则无法通过String引用控件名称。我不是沿着那条路走,而是创建一个数组并用文本框填充它:

Dim txtBoxes As TextBox() = {txtBox1, txtBox2, txtBox3, txtBox4, txtBox5, txtBox6}
Dim intValues As Integer(0 To 5)
For count As Integer = 0 To 5
    intValues(count) = Convert.ToInt32(txtBoxes(count).Text)
Next

答案 2 :(得分:0)

最简单的方法是遍历Controls的内容以查找文本框。你可以:

  • 使用.Tag属性标记文本框以标识它们,或者如其他答案所示,使用.Name属性。

  • 如果表单上有很多其他控件,并且它们可能不正常,您还可以检查每个控件以查看它是否为文本框。假设它们的顺序相反,因为Controls数组从头到尾。

    Dim nums() As Integer = {10, 20, 30, 40, 50, 60}
    Dim ctrl As Control
    For Each ctrl In Me.Controls
        If TypeOf (ctrl) Is TextBox Then
            ctrl.Text = nums(Val(ctrl.Name(ctrl.Name.Length - 1)) - 1)
        End If
    Next 
    

您还可以通过编程方式实例化一组文本框,但您必须手动设置所有展示位置等。

当我对下面的答案发表评论时,您可能需要使用DirectCastctrl投射到System.Web.UI.Control以访问.Name