Вы должны сохранить свой первый номер, второй номер и оператор (вы назвали это «формулой») отдельно и обрабатывать настройку текста текстового поля отдельно. Вот один из способов сделать это:
Dim formula As String
Dim itemOne As String 'This time this is string
Dim itemTwo As String 'This time this is string
Dim currentItem As String 'Will hold the current number being entered
Dim Result As String 'This is string, too.
Все ваши кнопки будут иметь такой код:
Private Sub btn1_Click()
currentItem = currentItem & "1"
UpdateText()
End Sub
Кнопки оператора:
Private Sub btnPlus_Click()
itemOne = currentItem
formula = "+"
UpdateText()
End Sub
И кнопка «Равно»:
Private Sub btnEqual_Click()
itemTwo = currentItem
If formula = "+" Then
'Str is optional, but Val's are necessary since
'itemOne and itemTwo are strings.
Result = Str( Val(itemOne) + Val(itemTwo) )
ElseIf ...
.
.
.
End If
UpdateText()
End Sub
Хорошо, заметили вызов UpdateText()
в конце каждой подпроцедуры? Вот оно:
Private Sub UpdateText()
txtboxScreen.Text = itemOne & formula & itemTwo
'If result is not empty, we will add the '=' part too
If Result <> "" Then
txtboxScreen.Text = txtboxScreen.Text & "=" & Result
End If
End Sub
Вас также может заинтересовать клавиша AC/ON
, которая устанавливает все переменные на ""
.
Метод был не очень аккуратным, но это лучшее, что вы можете сделать без оценщика выражений. Оценщик выражений может вычислить всю формулу как есть. Eval
- такая функция, и вы можете найти некоторые ее реализации в сети.