2014-10-06 143 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

    相关问题