2014-05-18 148 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 –