lelouch_vi 2 Ответов: 2

Как выполнить вычисления без нажатия знака равенства в калькуляторе?


Я сделал калькулятор, используя vb.net-да. Я хочу, чтобы калькулятор вычислял каждый раз, когда нажимается операция, не нажимая знак равенства. Я не знаю, как это сделать.

Это мой код, который я использую для своих кнопок 0-9:
Private Sub btnNumbers_Click(sender As Object, e As EventArgs) Handles btn9.Click, btn8.Click, btn6.Click, btn5.Click, btn4.Click, btn3.Click, btn2.Click, btn1.Click, btn0.Click


       Dim btnNum As Button = CType(sender, Button)

       input = CDbl(btnNum.Text)

       If txtInput.Text = "0" Or flag = True Then

           txtInput.Text = ""
           txtInput.Text = btnNum.Text
           flag = False


       Else

           txtInput.Text = txtInput.Text & btnNum.Text

       End If


   End Sub


Это код, который я использую для своих кнопок операторов:

Private Sub btnSign(sender As Object, e As EventArgs) Handles btnMultiply.Click, btnMinus.Click, btnDivide.Click, btnAdd.Click

        Dim btnSigns As Button = CType(sender, Button)
        operation = btnSigns.Text


        If txtInput.Text <> 0 Then

                operation = btnSigns.Text
                txtHistory.Text = txtHistory.Text & " " & txtInput.Text & " " & btnSigns.Text
                flag = True

        Else

                operation = btnSigns.Text
                txtHistory.Text = txtHistory.Text & " " & txtInput.Text & " " & btnSigns.Text
                flag = True
            End If

    End Sub


Что я уже пробовал:

Мое решение таково:
1.пользователь вводит число в txtInput.text, а затем сохраняет его в переменной 1.
2.если пользователь нажимает оператор и вводит другое число в txtInput.text, то
число будет сохранено в переменной 2, так как переменная 1 уже имеет в себе число.
3.если пользователь снова нажимает оператор, выполните расчет.

Я отслеживаю оператор,который был нажат, чтобы программа знала, нужно ли ей складывать, вычитать и т. д.
То, с чем я борюсь, - это как я могу отслеживать переменную 2? потому что я могу отслеживать переменную 1, очевидно.

Я не знаю, какое событие я должен вызвать, чтобы отслеживать переменную 2.

Patrice T

Какая картина ?

lelouch_vi 2

извините, я подумал, что могу прикрепить сюда фотографию, пока печатаю свой пост. Забыл его снять.

2 Ответов

Рейтинг:
0

OriginalGriff

Вы действительно не можете этого сделать, если не ведете запись всего вычисления, чтобы вы могли "пересчитать" все выражение на лету - подумайте об этом:
Я ввожу "1 + 2"
Вы вычисляете "1 + 2 равно 3"
Я нажимаю "* 3"
Вы вычисляете, что "3 * 3" равно 9
Но чего я хотел, так это ... 1 + 2 * 3 равно 1 + 6 равно 7.

Поэтому я бы предложил сохранить весь расчет и обрабатывать все это каждый раз, когда пользователь вводит что-то, если вы создадите три класса:
Абстрактный CalculationItem, операнд (производный от CalculationItem) и оператор a Operand (производный от CalculationItem), затем создайте список CalculationItems для их хранения - затем вы можете обработать эту коллекцию многими способами, чтобы получить "правильный" результат.


Рейтинг:
0

RickZeeland

Вы можете использовать общие переменные, чтобы сохранить это значение, см.: https://www.dotnetperls.com/shared-vbnet[^]