Domanda

The program is supposed to use the enumeration type declared at the beginning within the Select Case statement. When I run the program, no matter which operator I select, it only uses the first case statement (for add). I tried rearranging them in the case statement to see if it just used the first one, but it still just chose add. What am I doing wrong?

Public Class Assignment2Calculator

    Dim Operand1 As Decimal
    Dim Operand2 As Decimal
    Dim CalcOperator As Integer

    Enum OperatorEnum
        add
        divide
        multiply
        subtract
    End Enum

    Private Sub Assignment2Calculator_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        cboOperator.DataSource = [Enum].GetValues(GetType(OperatorEnum))
        AcceptButton = btnCalculate

    End Sub

    Private Sub IsValidData(ByVal txtOperand1 As Object, ByVal txtOperand2 As Object)
        Operand1 = Convert.ToDecimal(txtOperand1.Text)
        Operand2 = Convert.ToDecimal(txtOperand2.Text)

        If (Operand1 > 0 Or Operand1 < 1000000) And (Operand2 > 0 Or Operand2 < 1000000) Then
            If IsNumeric(Operand1) And IsNumeric(Operand2) Then

            End If
        Else
            MessageBox.Show("Operand 1 or 2 is not valid")
        End If

    End Sub

    Private Sub btnCalculate_Click(sender As System.Object, e As System.EventArgs) Handles btnCalculate.Click

        IsValidData(txtOperand1, txtOperand2)


        Calculate(Operand1, Operand2, CalcOperator)


    End Sub


    Private Sub Calculate(ByVal Operand1 As Decimal, ByVal Operand2 As Decimal, _
                          ByVal CalcOperator As Integer)
        'Performs requested operation using select case and enumeration

        Dim answer As Decimal
        Dim CalcOperatorCase As OperatorEnum

        Select Case CalcOperatorCase
            Case Is = OperatorEnum.add

                answer = Operand1 + Operand2
                txtResult.Text = FormatNumber(answer, 3)

            Case Is = OperatorEnum.divide
                answer = Operand1 - Operand2
                txtResult.Text = FormatNumber(answer, 3)

            Case Is = OperatorEnum.multiply
                answer = Operand1 * Operand2
                txtResult.Text = FormatNumber(answer, 3)

            Case Is = OperatorEnum.subtract
                answer = Operand1 / Operand2
                txtResult.Text = FormatNumber(answer, 3)

            Case Else
                MessageBox.Show("Please select an operator")

        End Select

    End Sub


End Class 
È stato utile?

Soluzione

You never assign CalcOperator, so it always remains the default for an Integer, which is 0 - which is add in your enum.

You can either add an event to change it whenever your ComboBox changes, or you can do it on btnCalculate_Click. If you don't need it anywhere else, you might as well do it on the Click event:

CalcOperator = CType(cboOperator.SelectedItem, OperatorEnum)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top