Vb.net 在循环中将文本框名称增加1

Vb.net 在循环中将文本框名称增加1,vb.net,Vb.net,好的,我已经做了大量的搜索,并提出了以下代码来增加文本框的名称,但它就是不起作用。文本框位于选项卡控件中,这有关系吗?我尝试在tab控件中引用它,但没有乐趣 Public Cpv_Coeffs As New List(Of Decimal) Dim i As Integer For i = 0 To 6 'Cpv_Coeffs.Add(txt_Cp_Coef_A1.Text) 'this line works fine Cpv_Coef

好的,我已经做了大量的搜索,并提出了以下代码来增加文本框的名称,但它就是不起作用。文本框位于选项卡控件中,这有关系吗?我尝试在tab控件中引用它,但没有乐趣

 Public Cpv_Coeffs As New List(Of Decimal)

        Dim i As Integer
    For i = 0 To 6
        'Cpv_Coeffs.Add(txt_Cp_Coef_A1.Text) 'this line works fine
        Cpv_Coeffs.Add(Me.Controls("txt_Cp_Coef_A" & 1).Text)
    Next i
我刚刚得到一个空引用异常
我哪里出错了?

如果希望它工作,无论控件在哪个容器中,都可以使用该功能。它可以递归地搜索控件,无论其嵌套有多深:

Public Cpv_Coeffs As New List(Of Decimal)

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim ctlName As String
    For i As Integer = 0 To 6
        ctlName = "txt_Cp_Coef_A" & i
        Dim ctl As Control = Me.Controls.Find(ctlName, True).FirstOrDefault
        If Not IsNothing(ctl) AndAlso TypeOf ctl Is TextBox Then
            Dim tb As TextBox = DirectCast(ctl, TextBox)
            Dim dcml As Decimal
            If Decimal.TryParse(tb.Text, dcml) Then
                Cpv_Coeffs.Add(dcml)
            Else
                MessageBox.Show("Value: " & tb.Text, "Invalid Decimal")
            End If
        Else
            MessageBox.Show("Name: " & ctlName & vbCrLf & "Could Not Find Control, or it was not a TextBox.", "Error")
        End If
    Next i
End Sub

上面的示例很详细,但它准确地显示了所有故障点可能出现的位置。

如果文本框位于TabControl中,则需要将
Me.Controls
更改为
tabPage.Controls
,其中tabPage是具有该控件的选项卡的名称。因此,您需要使用
&i
而不是
&1
,否则每次都会得到相同的控制。如果将
十进制
值添加到
列表(十进制)
中,而不是
字符串
,也可能会有所帮助。如果您对有严格的
选项(您通常应该这样做),那么该代码将无法编译。谢谢JayV。这就解决了问题。Jmc,对不起,我的帖子打错了,它应该已经读过了&i+1感谢,大概从性能的角度来看,我最好在知道控件时指定它,而不是搜索它?当然。如果你可以直接访问它,它会更快;搜索速度会变慢。