Ошибка TextBox TextChanged

Мой код нуждается в небольшой доработке

Public Class Form1
Dim Bread, TotalPrice As Double
Private Sub txtBread_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtBread.TextChanged

    If txtBread.Text = "" Then
        TotalPrice = TotalPrice - Bread
        lblBread.Text = Bread.ToString
        lblPrice.Text = TotalPrice.ToString
    Else
        Bread = Val(txtBread.Text) * 3.25
        lblBread.Text = Bread.ToString
        TotalPrice = TotalPrice + Bread
        lblPrice.Text = TotalPrice.ToString
    End If


End Sub
End Class

Мое текстовое поле подходит только для однозначного числа. Итак, моя ошибка здесь заключается в том, что когда я ввожу двузначные числа в свое текстовое поле, оно фактически обновляет мои метки, но когда я нажимаю клавишу Backspace, оно больше не обновляется.


person Jan Darren Noroña    schedule 02.07.2013    source источник
comment
так как ваш txtBread.Text был изменен .. ваш lblPrice.Text должен быть изменен ..   -  person matzone    schedule 02.07.2013


Ответы (2)


Значение переменной TotalPrice растет с каждым новым входом (независимо от того, больше оно или меньше предыдущего) и, следовательно, значение lblPrice.Text. Например:

txtBread.Text    TotalPrice     
   1                  1
   15                 16
   1                  17

Если вы объясните, чего именно вы хотите достичь, я могу обновить ваш код.

Dim Bread As Double
Dim TotalPrice as Double = 5 'Any constant value you want
Private Sub txtBread_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtBread.TextChanged

    If txtBread.Text = "" Then
        lblBread.Text = Bread.ToString
        lblPrice.Text = Convert.ToString(TotalPrice - Bread)
    Else
        Bread = Val(txtBread.Text) * 3.25
        lblBread.Text = Bread.ToString
        lblPrice.Text = Convert.ToString(TotalPrice + Bread)
    End If
End Sub
person varocarbas    schedule 02.07.2013
comment
Хммм. Извините за мой плохой английский, но я надеюсь, что вы понимаете. - person Jan Darren Noroña; 02.07.2013
comment
Когда я ввожу 1 в свое текстовое поле, моя метка обновляется до 3,25, но когда я ввожу, например, 11, я удаляю ее. Цена теперь была неправильной из-за того, что мой код работает только тогда, когда мое текстовое поле пусто (при условии if) - person Jan Darren Noroña; 02.07.2013
comment
Для лучшего объяснения ввод: 1 вывод: 3,25 ввод: 11, когда я нажал клавишу возврата и удалил 1 из 11, вывод теперь неверен, он не вычитает. - person Jan Darren Noroña; 02.07.2013
comment
Но мой вопрос: для чего TotalPrice? Что вы хотите там вычислить? Причина, по которой он не обновляется с 11 до 1, заключается в том, что он не предназначен для этого; он предназначен для добавления всех введенных значений, и это то, что он делает. Пожалуйста, объясните мне точное значение, которое вы хотите отобразить в lblPrice.Text. - person varocarbas; 02.07.2013
comment
Обратите внимание, что часть TextChanged работает отлично; проблема заключается в расчетах, которые вы делаете с этой информацией (TotalPrice). - person varocarbas; 02.07.2013
comment
Например, у меня есть фиксированное значение для общей цены, например 5, затем я хотел добавить хлеб, поэтому я добавил 1 в текстовое поле, теперь общая цена обновляется до 5 + 3,25 = 8,25. - person Jan Darren Noroña; 02.07.2013
comment
Что-то не так с моим условием, когда я нажимаю клавишу Backspace один раз (когда я ввожу двухзначное число), оно не вычитается, потому что условие будет вычитаться только тогда, когда в текстовом поле нет символов. Как мне это сделать? - person Jan Darren Noroña; 02.07.2013
comment
Вы должны добавить дополнительный объект, сообщающий, когда добавлять/вычитать. Множество опций: два текстовых поля (одно для значений, которые нужно добавить, а другое — для значений, которые нужно вычесть), флажок (если установлен, значения будут вычтены, иначе добавлены), индикация в текстовом поле (например, если вы вводите после данное число означало бы прибавление, иначе вычитание) и т. д. - person varocarbas; 02.07.2013

Попробуйте с моим образцом..

Public Class Form1
    Dim Bread As Double
    Dim TotalPrice As Double = 100 '---> maybe this is a result from a function

    Private Sub txtBread_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtBread.TextChanged

        If txtBread.Text = "" Then
            Bread = 0
        Else
            Bread = Val(txtBread.Text) * 3.25
        End If
        lblBread.Text = Bread.ToString
        lblPrice.Text = (TotalPrice + Bread).ToString
    End Sub
End Class
person matzone    schedule 02.07.2013