VB Windows窗体在多行文本框中计算数字

时间:2018-10-04 12:32:13

标签: vb.net textbox multiline

我想计算每行:就像第一行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

请帮助我找到一些解决方案或解释,以实现输出。

enter image description here enter image description here

2 个答案:

答案 0 :(得分:0)

这应该有效

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将元素放回到由SEPERATOR分隔的字符串中

您的原始代码为什么不起作用?

  • 您正在遍历文本中的每个字符,并将字符乘以浮点数(如注释中所述,Option Strict On可以避免这种情况)。
  • 然后,在每次迭代中,您进行(简化)Label9.Text = Val(digit) * 1.616,每次都会覆盖Label。
  • 如果要逐步调试(在注释中也有建议),您会看到Label变为 1 x1.616 = 1.616 2 < /strong>x1.616=3.232 3 x1.616 = 4.848 等。结果是最后一个字符< / em>在您的文本框中,“ 3”乘以1.161 = 4.848。显然,这不是您想要的。您需要遍历每个整数。多行文本框用新行分隔每行。因此,我们改为遍历每条

答案 1 :(得分:-1)

您可以通过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