Форма окна VB вычисляет цифру в многострочном текстовом поле - PullRequest
0 голосов
/ 04 октября 2018

Я хочу вычислить каждую строку: это как первая строка 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 голосов
/ 04 октября 2018

Это должно работать

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 делает массив из каждой строки в TextBox, используя SEPARATOR в качестве разделителя
  • Select преобразует элементы в значения их значений. ФАКТОР
  • Aggregate объединяет элементы обратно в строку с разделителем SEPERATOR

Почему не былотвой исходный код работает?

  • Вы перебирали каждый символ в тексте и умножали его на число с плавающей точкой (Option Strict On, как предлагалось в комментариях, предотвратило бы это),
  • Затем в каждой итерации вы делаете (упрощенно) Label9.Text = Val(digit) * 1.616, который каждый раз перезаписывает метку.
  • Если бы вы проходили через отладку (также предложенную в комментариях), вы бы увиделиЯрлык становится 1 x1.616 = 1.616 , 2 x1.616 = 3.232 , 3 x1.616 = 4.848 и т. Д. В результате вы получили самый последний символ в вашем текстовом поле, «3», времена 1.161 = 4.848.Очевидно, это было не то, что вы хотели.Вам нужно было вместо этого перебирать каждое целое число.Многострочный TextBox разделяет каждую строку новой строкой.Поэтому вместо этого мы перебираем каждую строку .
0 голосов
/ 04 октября 2018

Вы можете использовать разделенную строку 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...