Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 字符串作为表达式连接到对象_Vb.net - Fatal编程技术网

Vb.net 字符串作为表达式连接到对象

Vb.net 字符串作为表达式连接到对象,vb.net,Vb.net,我有多个文本框控件Monday,它们将保存一个值。我希望能够将所有Monday文本框相加,并将该值存储为monTotal。我收到一条错误消息,说字符串不能转换为整数 For i As Integer = 1 To rowCount Step 1 Dim var As Object var = "txtMonday" & i & ".Text" monTotal = monTotal + CInt(var) Next

我有多个文本框控件
Monday
,它们将保存一个值。我希望能够将所有
Monday
文本框相加,并将该值存储为
monTotal
。我收到一条错误消息,说字符串不能转换为整数

    For i As Integer = 1 To rowCount Step 1
        Dim var As Object
        var = "txtMonday" & i & ".Text"
        monTotal = monTotal + CInt(var)
    Next

您试图获取对文本框的引用的方式不是VisualBasic.NET的惯用方式

var = "txtMonday" & i & ".Text"     ' this is not a way to obtain a reference to the text box's text
虽然可以使用反射来完成类似的事情,但最好重构代码,使用文本框数组

由于您可能正在使用Windows窗体,因此您可能可以实现逻辑,在窗体上使用如下内容查找您感兴趣的文本框控件:

' assuming container is the control that contains the text boxes    
For Each ctrl In container.Controls
  If (ctrl.GetType() Is GetType(TextBox)) Then
      If ctrl.Name.StartsWith("txtMonday") Then
         Dim txt As TextBox = CType(ctrl, TextBox)
         monTotal = monTotal + CInt(txt.Text)
      End If
  End If
Next

上面的示例假设所有
txtmasday..
文本框都放置在名为
container
的控件中。这可能是表单本身,也可能是其他一些面板或表格。

如果所有文本框都位于表单上,而没有任何文本框用于其他文本工作,那么您可以使用它。您可以将包含要查找的值的所有文本框放置在单独的容器中,并按如下方式获取它们,但使用该控件集合

Dim amount As Double = 0
For Each tb As Textbox In Me.Controls.OfType(Of Textbox)()
  amount += Convert.ToDouble(tb.Text)
Next

所以,var是一个对象,但当您在下一行设置它时,它也可能是一个字符串。如果您想找到检索实际控件并转换到文本框的方法,然后可以调用.text我同意,必须有一种更干净的方法来检索值。我之所以使用for循环,是因为用户可以单击“添加行”按钮来添加另一行,因此添加了另一个文本框,我不知道有多少个文本框。在这种情况下,我能使用文本框数组吗?@user1695996-是的,这是使用数组或列表存储文本框集合的完美用例。每次将文本框添加到UI时,也会将其添加到列表中。然后你浏览列表并计算总数。你的代码将对表单中所有文本框的值求和。如果他有任何文本框,他不需要在求和中添加。它将失败。用文本框名称也勾选..不是开玩笑-有一个免责声明。
 Dim monTotal as double=0 

 For Each ctrl As Control In Me.Controls
            If TypeOf ctrl Is TextBox AndAlso ctrl.Name.StartsWith("txtMonday") Then
                   monTotal = monTotal + val(ctrl.Text) 
            End If

 Next