麻烦调回变量

时间:2018-11-21 23:08:52

标签: vb.net visual-studio callback

我在Visual Basic课堂上练习时遇到麻烦。

我需要使用一个子过程来识别是否选中了某些单选按钮,并使它们增加了产品的销售成本。
然后,我需要在btnClick过程中引用它们,以便可以使用它来显示字符串的开销。

参考说明:

Mats-R-Us sells three different types of mats:<br> 
- Standard ($99),<br>
- Deluxe ($129),<br>
- INTERMEDIATE Premium ($179).<br>

All of the mats are available in:<br>
- blue,<br>
- red ($10 extra), <br>
- pink ($15 extra). <br>

如果客户希望垫子是可折叠的,还需要另外收取25美元的费用。

  

创建Windows窗体应用程序。将以下名称用于   项目和解决方案分别为:Mats项目和Mats解决方案。   将应用程序保存在VB2017 \ Chap06文件夹中。创建界面   如图6-58所示。使用功能确定垫子的价格   无需支付任何额外费用。使用Sub过程来计算   总额外费用(如果有)。

我当前拥有的代码:
Option Explicit OnOption Strict OnOption Infer Off

enter image description here

Public Class frmMain
    Private Function GetStandard(dblTotal As Double) As Double
        Dim dblPrice As Double

        If radStandard.Checked Then
            dblPrice = 99
        ElseIf radDeluxe.Checked Then
            dblPrice = 129
        ElseIf radPremium.Checked Then
            dblPrice = 179
        End If
        Return dblPrice
        dblPrice = dblTotal
    End Function

    Private Sub AddColorCost(ByRef dblTotal As Double)
        Dim dblPrice As Double
        If radRed.Checked Then
            dblPrice = dblPrice + 10
        ElseIf radPink.Checked Then
            dblPrice = dblPrice + 15
        End If

    End Sub

    Private Sub btnCalc_Click(sender As Object, e As EventArgs) Handles btnCalc.Click
        Dim DblTotal As Double
        Call AddColorCost(dblTotal)
        lblPrice.Text = dblTotal.ToString("C2")
    End Sub

    Private Sub BtnExit_Click(sender As Object, e As EventArgs) Handles BtnExit.Click
        Me.Close()
    End Sub
End Class

编辑:我试图在子功能中包括价格上涨,但是调试所有内容时,唯一显示的数字是$ 0。

1 个答案:

答案 0 :(得分:1)

让我们按照说明进行操作。 使用功能确定垫子的价格,然后再收取其他费用。

Private Function BaseCost() As Decimal
        Dim dblPrice As Decimal

        If radStandard.Checked Then
            dblPrice = 99
        ElseIf radDeluxe.Checked Then
            dblPrice = 129
        ElseIf radPremium.Checked Then
            dblPrice = 179
        End If
        Return dblPrice
End Function

使用Sub过程计算总附加费用(如果有)。 由于我们使用Sub而不返回值,因此我们将使用Form级别(类级别)变量,以便其他方法可以看到它。另一种方法是传递参数ByRef,但现在不必担心。 AddChanges += 10是编写AddChanges = AddChanges + 10

的快捷方式
'This variable is Form level (class level) it is not inside a method but it is inside the class.
Private AddCharges As Decimal

Private Sub AdditionalCharges()
        If radRed.Checked Then
            AddCharges += 10
        ElseIf radPink.Checked Then
            AddCharges += 15
        End If
        If chkFoldable.Checked Then
            AddCharges += 25
        End If
End Sub

现在将其全部添加到“计算”按钮中

Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click
        Dim Total As Decimal
    'BaseCost is a Function and returns a value
        Total = BaseCost()
    'AdditionalCharges is a Sub and will change the Form level variable
        AdditionalCharges() 
        Total += AddCharges
        lblPrice.Text = Total.ToString("C2")
        'reset AddCharges so you can make different selections and Calculate again.
        AddCharges = 0
End Sub