2014-05-18 201 views
0

我創建了一個VB.net計算器應用程序。它工作正常,但說我想添加5 + 7.然後作爲我的應用程序的作品,我可以按鍵盤5,因爲我給數字5的按鈕文本爲&5,但如果我按下鍵盤上的+鍵不起作用,我必須在計算器中按+ button給計算器輸入鍵盤按鍵,而不按下計算器按鈕

我認爲這是因爲我的添加按鈕被設計爲處理單擊事件爲btn_add_Click。是否有一種方法可以讓此應用程序工作,以便在不按下計算器中的按鈕的情況下,我可以按下鍵盤中的按鍵並執行computation.Here是我的代碼:

Imports System.Math 
Public Class Form1 
    Private isFirstExist As Boolean 
    Private inputOperator As String 
    Private secondNum As Decimal 
    Private firstNum As Decimal 
Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtCalc.TextChanged 

End Sub 

Private Sub btn_zero_Click(sender As System.Object, e As System.EventArgs) Handles btn_zero.Click 
    removeFrontZero(0) 

End Sub 

Private Sub btn_one_Click(sender As System.Object, e As System.EventArgs) Handles btn_one.Click 
    removeFrontZero(1) 
End Sub 

Private Sub btn_two_Click(sender As System.Object, e As System.EventArgs) Handles btn_two.Click 
    removeFrontZero(2) 
End Sub 



Private Sub btn_clear_Click(sender As System.Object, e As System.EventArgs) Handles btn_clear.Click 
    txtCalc.Clear() 
    txtCalc.Text = "0" 


End Sub 


'Remove zero which is at the start 
Public Sub removeFrontZero(ByVal digit As Integer) 
    If txtCalc.Text = "0" Then 
     txtCalc.Text = CStr(digit) 
    Else 
     txtCalc.Text &= digit 
    End If 
End Sub 

Private Sub btn_add_Click(sender As System.Object, e As System.EventArgs) Handles btn_add.Click 
    inputOperator = "+" 
    isFirst() 
End Sub 

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
    isFirstExist = False 
End Sub 

Private Sub btn_equal_Click(sender As System.Object, e As System.EventArgs) Handles btn_equal.Click 
    If isFirstExist Then 
     secondNum = CType(txtCalc.Text, Decimal) 
    End If 
    'Calculating the result 
    Dim result As Decimal = calculate(firstNum, secondNum, inputOperator) 
    txtCalc.Text = result.ToString() 
    isFirstExist = False 
End Sub 

Private Function calculate(ByVal num1 As Decimal, ByVal num2 As Decimal, ByVal inputOp As String) As Decimal 
    Dim output As Decimal 
    firstNum = num1 
    secondNum = num2 
    Select Case inputOp 
     Case "+" 
      output = num1 + num2 
     Case "-" 
      output = num1 - num2 

     Case "/" 
      Dim value As Decimal 
      Try 
       isFirst() 
       value = (num1/num2) 
      Catch ex As DivideByZeroException 
       MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK) 
      End Try 
      output = value 
     Case "*" 
      output = num1 * num2 
     Case "Mod" 
      output = (num1 Mod num2) 
     Case "^" 
      output = CDec(Math.Pow(num1, num2)) 


    End Select 
    Return output 

End Function 
Private Sub isFirst() 
    If isFirstExist = False Then 
     firstNum = CType(txtCalc.Text, Decimal) 
     isFirstExist = True 
     txtCalc.Text = "0" 
    End If 
End Sub 
+0

你爲什麼不用+按鈕做同樣的事情?就像你用數字按鈕做的那樣(即make +鍵盤加速器)? –

+0

我做了,但加法操作沒有得到執行 –

回答

1

假設你正在使用文本框來保存用戶的輸入,在框TextChanged甚至則KeyPressed處理程序陷阱的操作按鍵和運行功能,而不是顯示操作者。

事情是這樣的:

Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtCalc.KeyPress 
    If e.KeyChar = "+"c Then 
     inputOperator = "+" 
     isFirst() 
     e.Handled = True 
    End If 
End Sub 

要顯示處理,以虛假的操作集。

+0

是的我正在使用文本框來保存用戶Input.Can請解釋你的意思是「在Textchanged甚至KeyPressed處理程序中捕獲操作員鍵並運行該函數而不是顯示它。「 –

+0

@sam_rox我爲你添加了一個樣本。 – tinstaafl

+0

Thanks.It works.I不知道有一個事件作爲按鍵。我仍然是一個初學者vb.net –