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