【发布时间】:2013-11-20 18:36:17
【问题描述】:
我正在用 VB.Net 做一个简单的计算器
我正在扩展代码,因为我想要这样,如果你做这样的操作
input(8) input(+) input(2) input(=) result(10)
但是如果我按下除号按钮和其他数字,我希望这样:
previousResult(10) input(/) input(5) input(=) newResult(2)
另外,如果我不时按相等运算符继续进行计算 它还应该给出正确的值
input(8) input(+) input(2) input(/) input(2) input(+) input(5) input(=) result(10)
无论计算多少次新操作,它都应该一直持续下去。 无论我点击哪个运算符(+、-、/、*),它都应该一直持续下去
我已经做了很多变量和函数,整个事情都是一团糟。 我的第一个计算将使用 case +
但是对于另一种情况+结果是错误的......这是我的代码:
Option Strict On
Option Infer Off
Option Explicit On
Public Class SimpleCalculatorForm
#Region "FormLoad"
Private Sub SimpleCalculatorForm_Load(ByVal sender As System.Object, ByVal e As EventArgs) Handles MyBase.Load
Dim decimalSeperator As Char = Convert.ToChar(Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator)
DecimalSeperatorButton.Text = decimalSeperator
ResultTextbox.Text = "0"
End Sub
#End Region
#Region "Methods"
Private Sub RemoveMinusBeforeValue()
For Each letter As String In ResultTextbox.Text
Dim pos As Integer = pos + 1
If letter = "-" Then
ResultTextbox.Text = ResultTextbox.Text.Substring(pos, ResultTextbox.Text.Length - pos)
Exit For
End If
Next
End Sub
Public Function ThereIsAnValue() As Boolean
Dim x As Boolean
For Each number As String In ResultTextbox.Text
If number <> "0" Then
x = True
Exit For
Else : x = False
End If
Next
Return x
End Function
Public Function TextboxContainsDecimalSeparator() As Boolean
Dim x As Boolean
For Each letter As String In ResultTextbox.Text
If letter = "," Then
x = True
Exit For
Else : x = False
End If
Next
Return x
End Function
Public Function TheValueIsPositive() As Boolean
Dim x As Boolean
For Each letter As String In ResultTextbox.Text
If letter = "-" Then
x = False
Exit For
Else : x = True
End If
Next
Return x
End Function
Public Sub ContainsZero(number As String)
If ResultTextbox.Text = "0" OrElse ResultTextbox.Text = "-0" Then
ResultTextbox.Text = number
ElseIf ResultTextbox.Text = "0.0" AndAlso number = "0" Then
ResultTextbox.Text = number
Else : ResultTextbox.Text &= number
End If
End Sub
#End Region
#Region "NumericButtons"
Private Sub Numeric_Buttons_Click(sender As Object, e As EventArgs) Handles ZeroButton.Click, OneButton.Click, TwoButton.Click, ThreeButton.Click, _
FourButton.Click, FiveButton.Click, SixButton.Click, SevenButton.Click, _
EightButton.Click, NineButton.Click
Dim x As Button = CType(sender, Button)
Dim button As String = x.Text
ContainsZero(button)
If _Calculatevalue1 = Nothing Then
_Calculatevalue1 &= button
Else
_Calculatevalue2 &= button
End If
End Sub
Private Sub DecimalSeperatorButton_Click(sender As Object, e As EventArgs) Handles DecimalSeperatorButton.Click
Dim x As Button = CType(sender, Button)
Dim button As String = x.Text
If TextboxContainsDecimalSeparator() = True Then
MessageBox.Show("You cannot enter 2 times the ',' sign")
Else : ResultTextbox.Text &= button
End If
End Sub
#End Region
#Region "OperatorButtons"
Private Sub ClearButton_Click(sender As Object, e As EventArgs) Handles ClearButton.Click
If ResultTextbox.Text = "0" Then
MessageBox.Show("The field is already empty")
ElseIf ResultTextbox.Text <> "0" Then
ResultTextbox.Text = "0"
_Calculatevalue1 = Nothing
_Calculatevalue2 = Nothing
_Calculatevalue3 = Nothing
End If
End Sub
Private Sub NegationButton_Click(sender As Object, e As EventArgs) Handles NegationButton.Click
If TheValueIsPositive() Then
ResultTextbox.Text = "-" & ResultTextbox.Text
_Calculatevalue3 = ResultTextbox.Text
Else : RemoveMinusBeforeValue()
_Calculatevalue3 = ResultTextbox.Text
End If
End Sub
Private _Calculatevalue1 As String
Private _Calculatevalue2 As String
Private _TheFinalResult As Decimal
Private _CurrentOperator As String
Private _Calculatevalue3 As String
Private Sub Operators_Buttons_Click(sender As Object, e As EventArgs) Handles AdditionButton.Click, SubtractionButton.Click, _
MultiplicationButton.Click, DivisionButton.Click
Dim x As Button = CType(sender, Button)
Dim button As String = x.Text
_CurrentOperator = button
If _Calculatevalue1 = Nothing AndAlso ThereIsAnValue() = False Then
MessageBox.Show("Give in a value before u use an operator")
ResultTextbox.Text = "0"
Else
If ThereIsAnValue() Then
If _Calculatevalue3 = Nothing Then
Select Case button
Case "+"
_Calculatevalue3 = Convert.ToString(Convert.ToDecimal(_Calculatevalue1) + Convert.ToDecimal(_Calculatevalue2))
ResultTextbox.Text = "0"
End Select
Else
Select Case button
Case "+"
_Calculatevalue3 = Convert.ToString(Convert.ToDecimal(_Calculatevalue3) + Convert.ToDecimal(_TheFinalResult))
ResultTextbox.Text = "0"
End Select
End If
End If
End If
End Sub
Private Sub EqualsButton_Click(sender As Object, e As EventArgs) Handles EqualsButton.Click
Select Case _CurrentOperator
Case "+"
_TheFinalResult = Convert.ToDecimal(_Calculatevalue1) + Convert.ToDecimal(_Calculatevalue2)
ResultTextbox.Text = _TheFinalResult.ToString
End Select
_Calculatevalue1 = Nothing
End Sub
#End Region
End Class
毫不犹豫地删除部分代码或更改内容。我可以说我写了很多。
【问题讨论】:
-
到底是什么问题?什么不工作?您想要完成的两件事的解决方案是相同的......而且非常明显(您暗示自己:
previousresult)。 -
嗨问题是我没有看到有关如何在未按下等号并且值继续输入时保持计算器计算的线索,或者在等号之后保持计算器计算的线索更多的价值正在到来......
-
保存
previousResult?
标签: .net vb.net calculator