【问题标题】:Trouble calling back variables无法回调变量
【发布时间】:2019-04-24 14:12:29
【问题描述】:

我在 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 Project 和 Mats Solution。 将应用程序保存在 VB2017\Chap06 文件夹中。创建接口 如图 6-58 所示。使用函数确定垫子的价格 在任何额外费用之前。使用 Sub 过程计算 额外费用总额(如果有)。

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

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 项检查(假设您只计算一个价格),界面选择似乎很奇怪。
  • 为您的代码添加更多详细信息。你的问题不够清楚
  • @NathanChampion 我得到了一个图像来模拟界面,它确实有超过 1 个用于标准定价的单选按钮。该界面有 6 个按钮,其中 2 个用于标准成本。它有 1 个复选框来指示可折叠选项。
  • @preciousbetine 老实说,我只是需要一些帮助。我能够显示不同垫子类型的成本,但我不知道如何以不同的颜色成本以及可折叠选项进行编码。添加更多细节的问题是我不知道要添加什么。
  • Diane Zak 练习...您还应该确认用户是否要退出应用程序...

标签: vb.net visual-studio callback


【解决方案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

【讨论】:

  • @preciousbetine 只是更多的解释,并按照说明让 Sub 过程显示 Sub 和 Function 之间的区别。
猜你喜欢
  • 2018-10-21
  • 1970-01-01
  • 1970-01-01
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多