Калькулятор VB6: Показать знак оператора на экране - PullRequest
1 голос
/ 24 января 2012

Я только начал изучать VB6 самостоятельно. Я создал простой калькулятор и хотел бы, чтобы на экране отображался «оператор».

Например, если я нажму «1», затем «плюс», а затем «8», я бы хотел, чтобы калькулятор показывал «1 + 8». А когда нажимается знак «равно», калькулятор должен показывать «1 + 8 = 9».

Ниже приведен очень нубский код, который я сделал:

    Dim formula As String
    Dim itemOne As Integer
    Dim itemTwo As Integer

    Private Sub btn1_Click()
    txtboxScreen.Text = txtboxScreen.Text & 1
    End Sub

    Private Sub btn2_Click()
    txtboxScreen.Text = txtboxScreen.Text & 2
    End Sub

    Private Sub btn3_Click()
    txtboxScreen.Text = txtboxScreen.Text & 3
    End Sub

    Private Sub btn4_Click()
    txtboxScreen.Text = txtboxScreen.Text & 4
    End Sub

    Private Sub btn5_Click()
    txtboxScreen.Text = txtboxScreen.Text & 5
    End Sub

    Private Sub btn6_Click()
    txtboxScreen.Text = txtboxScreen.Text & 6
    End Sub

    Private Sub btn7_Click()
    txtboxScreen.Text = txtboxScreen.Text & 7
    End Sub

    Private Sub btn8_Click()
    txtboxScreen.Text = txtboxScreen.Text & 8
    End Sub

    Private Sub btn9_Click()
    txtboxScreen.Text = txtboxScreen.Text & 9
    End Sub

    Private Sub btnDivide_Click()
    itemOne = txtboxScreen.Text
    txtboxScreen.Text = ""
    formula = "/"
    End Sub

    Private Sub btnEqual_Click()
    itemTwo = txtboxScreen.Text
    If formula = "+" Then
    txtboxScreen.Text = itemOne + itemTwo
    ElseIf formula = "-" Then
    txtboxScreen.Text = itemOne - itemTwo
    ElseIf formula = "*" Then
    txtboxScreen.Text = itemOne * itemTwo
    ElseIf formula = "/" Then
    txtboxScreen.Text = itemOne / itemTwo
    End If
    End Sub

    Private Sub btnMinus_Click()
    itemOne = txtboxScreen.Text
    txtboxScreen.Text = ""
    formula = "-"
    End Sub

    Private Sub btnPlus_Click()
    itemOne = txtboxScreen.Text
    txtboxScreen.Text = ""
    formula = "+"
    End Sub

    Private Sub btnTimes_Click()
    itemOne = txtboxScreen.Text
    txtboxScreen.Text = ""
    formula = "*"
    End Sub

    Private Sub btnZero_Click()
    txtboxScreen.Text = txtboxScreen.Text & 0
    End Sub

Ответы [ 3 ]

3 голосов
/ 24 января 2012

Вы можете подумать об использовании массива управления для своих цифровых кнопок.Это значительно упростит ваш код в этом случае, особенно для более сложных проектов:

    Private formula As String
    Private itemOne As Integer
    Private itemTwo As Integer

    Private Sub btnNumbers_Click(Index As Integer)
          txtboxScreen.Text = txtboxScreen.Text & Index
    End Sub

''Remainder of your code goes here

Кроме того, когда вы объявляете переменные в разделе объявлений формы, вы должны использовать Private вместо Dim.

1 голос
/ 24 января 2012

Вы должны сохранить свой первый номер, второй номер и оператор (вы назвали это «формулой») отдельно и обрабатывать настройку текста текстового поля отдельно. Вот один из способов сделать это:

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 - такая функция, и вы можете найти некоторые ее реализации в сети.

1 голос
/ 24 января 2012

Я думаю, что вы хотели бы объединить знак оператора нажатой кнопки со значением, которое вы имели в текстовом поле on button_click.

что-то вроде:

Private Sub btnPlus_Click()
    txtboxScreen.Text = txtboxScreen.Text & " + "
End Sub

и на равной кнопке вы бы хотели оценить выражение

Private Sub btnEqual_Click()
    txtboxScreen.Text = txtboxScreen.Text & " = " & Eval(txtboxScreen.Text)
End Sub

оценка с использованием Eval () не является надежным решением, но этопростой способ добиться этой функциональности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...