2014-10-06 67 views
0

我正在編寫一個簡單的Visual Basic四功能計算器(加,減,乘,除)應用程序,我希望在按下操作符時顯示中間結果。如何在VB計算器程序中顯示中間結果

,我已創建的視窗表單包含按鈕,因此輸入僅通過在GUI上的鼠標點擊(無鍵盤輸入)

如在要求定義需要一個完整的「問題」將根據輸入以下順序規則:

  1. 一個數字,隨後
  2. 操作者鍵,接着
  3. 另一個號碼,然後按
  4. (可選)重複步驟2(按操作員時顯示中間結果)或等號按鈕。

據我所知,需要在運營商click_events中進行更改才能滿足此要求,但我不知道該怎麼做。

這裏是在添加代碼,減,乘,除和等於按鈕

Dim txtNumber As String 
Dim variable1 As Decimal 
Dim variable2 As Decimal 
Dim answerResult As Decimal 
Dim arithmeticProcess As String 

Private Sub btnAdd_Click(sender As System.Object, e As System.EventArgs) Handles btnAdd.Click 
    If answerResult <> 0 Then 
     answerResult = variable1 + variable2 
     variable1 = CDec(lblDisplay.Text) 
     lblDisplay.Text = "" 
     arithmeticProcess = "+" 
    Else 
     variable1 = CDec(lblDisplay.Text) 
     lblDisplay.Text = "" 
     arithmeticProcess = "+" 
    End If 


End Sub 

Private Sub btnSubtract_Click(sender As System.Object, e As System.EventArgs) Handles btnSubtract.Click 
    variable1 = CDec(lblDisplay.Text) 
    lblDisplay.Text = "" 
    arithmeticProcess = "-" 
End Sub 

Private Sub btnMultiply_Click(sender As System.Object, e As System.EventArgs) Handles btnMultiply.Click 
    variable1 = CDec(lblDisplay.Text) 
    lblDisplay.Text = "" 
    arithmeticProcess = "*" 
End Sub 

Private Sub btnDivide_Click(sender As System.Object, e As System.EventArgs) Handles btnDivide.Click 
    variable1 = CDec(lblDisplay.Text) 
    lblDisplay.Text = "" 
    arithmeticProcess = "/" 
End Sub 

Private Sub btnEqual_Click(sender As System.Object, e As System.EventArgs) Handles btnEqual.Click 
    variable2 = lblDisplay.Text 
    If arithmeticProcess = "+" Then 
     answerResult = variable1 + variable2 
    ElseIf arithmeticProcess = "-" Then 
     answerResult = variable1 - variable2 
    ElseIf arithmeticProcess = "*" Then 
     answerResult = variable1 * variable2 
    Else 
     answerResult = variable1/variable2 
    End If 

    answerResult = Math.Round(answerResult, 9) 
    Select Case answerResult 
     Case Is > 4000000000 
      MessageBox.Show("The answer is too large to be displayed.") 
      variable1 = 0 
      variable2 = 0 
      lblDisplay.Text = "" 
     Case Is < -4000000000 
      MessageBox.Show("The answer is too small to be displayed.") 
      variable1 = 0 
      variable2 = 0 
      lblDisplay.Text = "" 
     Case Else 
      lblDisplay.Text = CStr(answerResult) 
    End Select 


End Sub 

回答

0

首先,我要禮貌地指出,我想你會用你的邏輯遇到問題因爲你繼續這個程序,但是搞清楚這是編程樂趣的一部分。您可能想退後一步並計算您的計算器應用程序,然後再回到它。

現在,您的數字按鈕(0-9)的代碼是什麼樣子,具體來說,您如何知道用戶是否正在輸入variable1variable2?假設你在一個「邏輯」的方式執行該操作的,這裏就是我會做:

  1. Dim variable1 As Decimal = 0給你的號碼了各種各樣的「默認值」,併爲variable2這樣做。
  2. 將代碼從btnEqual_Click中提取出來並放入其自己的方法中,我們將其稱爲Public Sub DoMaths(),然後將DoMaths()簡寫爲btnEqual_Click(...)
  3. 對於每一個'arithmeticProcess'按鈕(加號,減號,...),你也可以在做完你已經做的事情之後再調用DoMaths()

現在這裏是棘手的部分。您必須仔細追蹤您在給定時間在屏幕上顯示哪個variableX

  • DoMaths(),執行你的計算之後,你會想的answerResult值移到variable1和復位variable2爲零。我會把這個放在Case Else區塊的末尾。

    Case Else 
        lblDisplay.Text = CStr(answerResult) 
        variable1 = answerResult 
        variable2 = 0 
    
  • 這讓你回到原來的地方是,如果用戶在他們的第一個數字(variable1)剛剛進入,並準備按下一個算術操作鍵的狀態。


    編輯,響應你的數字按鈕的代碼:

    首先,一個建議:txtNumber += "1"確實應該txtNumber &= "1"。儘管還有其他參數,但plus用於添加數字,and符號用於連接兩個字符串。其次,爲了達到你所期望的中間計算,你將不得不跟蹤「最終計算」(使用Equals鍵)是否已經執行。我建議使用你的variable1來做這件事。當按下任何正號/負號/等於/等按鈕時,只要variable1爲零,就可以[一般]認爲沒有任何事情要做。

    1. 用戶鍵入一個數字,然後按下一個算術鍵。您存儲算術運算符(與您已經存在的一樣)並將該數字移至variable1
    2. 現在用戶輸入第二個數字,您在variable2中存儲的第二個數字,因爲variable1非零。
    3. 用戶然後有兩個選項:1.按Equals鍵並正常執行邏輯,或按另一個算術鍵並繼續計算。在第二種情況下,對兩個變量執行操作,顯示結果並將其存儲在variable1中,並清除variable2arithmeticProcess的值。

    現在,如果用戶剛剛啓動了應用程序,並且在計算中輸入了第一個數字,您基本上會回到同一位置。你應該能夠從這裏繼續正常。

    +0

    '如果lblDisplay.Text = 「0」 然後 lblDisplay.Text = 「」 結束如果 txtNumber = lblDisplay.Text 如果txtNumber.Contains( 「」)。然後 如果txtNumber.Length> 10然後 MessageBox.Show(「顯示須顯示不超過10個數字。」) 退出小組 結束如果 elseif的txtNumber.Length> 9然後 MessageBox.Show(「顯示須顯示不超過10個數字。」) 退出Sub End If txtNumber + =「1」 lblDisplay.Text = txtNumber' – Theo 2014-10-07 12:27:17

    +0

    這是我的按鈕0-9的代碼,但我該如何流程圖應用程序?要做這些的步驟是什麼? – Theo 2014-10-07 12:28:04

    相關問題