VB windows 表单计算多行文本框中的数字
VB windows form calculate the digit in a multiline textbox
我想计算每一行:就像第一行123*1.616和第二行213*1.616,并显示每个总数。
千克文本框中输入的每个数字将乘以 1.616,然后在 kati 标签中显示结果。
这是我的代码:
Private Sub b1_Click(sender As Object, e As EventArgs) Handles b1.Enter
For Each digit In (TextBox1.Text)
total1 = Val(digit) * 1.616
Label9.Text = total1
Next
Label9.Text = total1
End sub
请帮我找到一些解决方案或解释来实现输出。
您可以使用 vbCrLf 拆分字符串
Sub main()
Dim multilinetext As String =
"10
20
30
40
50
60"
Dim number_array = multilinetext.Split(vbCrLf)
Dim output As Integer = 0
For Each i In number_array
output += i
Next
Stop
End Sub
这应该有效
Private FACTOR As Decimal = 1.616
Private SEPARATOR As String = Environment.NewLine
Private Sub b1_Click(sender As Object, e As EventArgs) Handles b1.Click
Label9.Text = TextBox1.Text.
Split({SEPARATOR}, StringSplitOptions.RemoveEmptyEntries).
Select(Function(s1) $"{Decimal.Parse(s1) * FACTOR:0.00#}").
Aggregate(Function(s1, s2) $"{s1}{SEPARATOR}{s2}")
End Sub
下面是 LINQ 中的函数
Split
使用 SEPARATOR 作为分隔符将 TextBox 中的每一行组成一个数组
Select
将元素转换为它们的值乘以 FACTOR
Aggregate
将元素重新组合成分隔符分隔的字符串
为什么您的原始代码不起作用?
- 您正在遍历文本中的每个字符,并将字符乘以浮点数(
Option Strict On
,如评论中所建议的那样可以防止这种情况发生)。
- 然后在每次迭代中,您执行(简化)
Label9.Text = Val(digit) * 1.616
,每次都会覆盖标签。
- 如果你在调试中单步执行(也在评论中建议),你会看到标签变成 1x1.616=1.616, 2x1.616=3.232, 3x1.616= 4.848,等等。结果是文本框中的最后一个 字符 ,'3',乘以 1.161 = 4.848。显然,这不是您想要的。您需要迭代每个完整的数字。多行文本框用新行分隔每一行。所以我们迭代每个行。
我想计算每一行:就像第一行123*1.616和第二行213*1.616,并显示每个总数。 千克文本框中输入的每个数字将乘以 1.616,然后在 kati 标签中显示结果。 这是我的代码:
Private Sub b1_Click(sender As Object, e As EventArgs) Handles b1.Enter
For Each digit In (TextBox1.Text)
total1 = Val(digit) * 1.616
Label9.Text = total1
Next
Label9.Text = total1
End sub
请帮我找到一些解决方案或解释来实现输出。
您可以使用 vbCrLf 拆分字符串
Sub main()
Dim multilinetext As String =
"10
20
30
40
50
60"
Dim number_array = multilinetext.Split(vbCrLf)
Dim output As Integer = 0
For Each i In number_array
output += i
Next
Stop
End Sub
这应该有效
Private FACTOR As Decimal = 1.616
Private SEPARATOR As String = Environment.NewLine
Private Sub b1_Click(sender As Object, e As EventArgs) Handles b1.Click
Label9.Text = TextBox1.Text.
Split({SEPARATOR}, StringSplitOptions.RemoveEmptyEntries).
Select(Function(s1) $"{Decimal.Parse(s1) * FACTOR:0.00#}").
Aggregate(Function(s1, s2) $"{s1}{SEPARATOR}{s2}")
End Sub
下面是 LINQ 中的函数
Split
使用 SEPARATOR 作为分隔符将 TextBox 中的每一行组成一个数组Select
将元素转换为它们的值乘以 FACTORAggregate
将元素重新组合成分隔符分隔的字符串
为什么您的原始代码不起作用?
- 您正在遍历文本中的每个字符,并将字符乘以浮点数(
Option Strict On
,如评论中所建议的那样可以防止这种情况发生)。 - 然后在每次迭代中,您执行(简化)
Label9.Text = Val(digit) * 1.616
,每次都会覆盖标签。 - 如果你在调试中单步执行(也在评论中建议),你会看到标签变成 1x1.616=1.616, 2x1.616=3.232, 3x1.616= 4.848,等等。结果是文本框中的最后一个 字符 ,'3',乘以 1.161 = 4.848。显然,这不是您想要的。您需要迭代每个完整的数字。多行文本框用新行分隔每一行。所以我们迭代每个行。