我正在尝试在Visual Basic中编写一个简单的程序,它通过一个类传递一个变量,计算它,然后返回它。我的表单“Pizza”有两组,每组有3个单选按钮。单击“总计”按钮后,比萨饼大小的价格将添加到比萨饼外壳价格中。我通过故障排除发现它只添加了“createPizza.Crust”+“createPizza.Size”。我错过了什么谢谢你的帮助。
Form "Pizza"
Public Class Pizza
Private Sub btnTotal_Click(sender As Object, e As EventArgs) Handles btnTotal.Click
If rThin.Checked = True Then
createPizza.Crust = 1
ElseIf rPan.Checked = True Then
createPizza.Crust = 2
ElseIf rStuff.Checked = True Then
createPizza.Crust = 3
End If
If rSm.Checked = True Then
createPizza.Size = 1
ElseIf rMm.Checked = True Then
createPizza.Size = 2
ElseIf rLg.Checked = True Then
createPizza.Size = 3
End If
lblTotal.Text = "Total: " + createPizza.PizTotal.ToString()
End Sub
End Class
班级“createPizza”
Public Class createPizza
Public Shared Size As Double
Public Shared Crust As Double
Public Shared Property pizzaCrust As Double
Get
Return Crust
End Get
Set(ByVal crustpr As Double)
If Crust = 1 Then
crustpr = 1
ElseIf Crust = 2 Then
crustpr = 1.5
ElseIf Crust = 3 Then
crustpr = 3
End If
Crust = crustpr
End Set
End Property
Public Shared Property pizzaSize As Double
Get
Return Size
End Get
Set(ByVal sizepr As Double)
If Size = 1 Then
sizepr = 10.0
ElseIf Size = 2 Then
sizepr = 12.5
ElseIf Size = 3 Then
sizepr = 15
End If
Size = sizepr
End Set
End Property
Public Shared Function PizTotal() As Decimal
Return pizzaCrust + pizzaSize
End Function
End Class
答案 0 :(得分:0)
我已经更新了适合VBA的课程。
Class createPizza
Private Size As Double
Private Crust As Double
Public Function PizTotal() As Double
PizTotal = pizzaCrust + pizzaSize
End Function
Public Property Get pizzaCrust() As Double
pizzaCrust = Crust
End Property
Public Property Let pizzaCrust(ByVal vNewValue As Double)
Select Case vNewValue
Case 1
crustpr = 1
Case 2
crustpr = 1.5
Case 3
crustpr = 3
End Select
Crust = crustpr
End Property
Public Property Get pizzaSize() As Double
pizzaSize = Size
End Property
Public Property Let pizzaSize(ByVal vNewValue As Double)
Select Case vNewValue
Case 1
sizepr = 10#
Case 2
sizepr = 12.5
Case 3
sizepr = 15
End Select
Size = sizepr
End Property
<强>模块强> 示例代码
Sub sample()
Dim a As New createPizza
a.pizzaCrust = 2
a.pizzaSize = 3
MsgBox a.PizTotal
End Sub
答案 1 :(得分:0)
您的PizTotal
功能仅返回Size + Crust
,因为您的pizzaSize
和pizzaCrust
属性分别返回Size
和Crust
的值。我可以看到您必须在属性设置中计算费用的代码,但是您从不致电pizzaSize
和pizzaCrust
的设置者,因此永远不会计算费用。
您的pizzaSize
和pizzaCrust
属性并没有多大意义。例如,地壳属性设置将价格作为输入,但如果Crust
为1,2或3,则重置价格,然后将价格存储在Crust
变量中。如果你写了以下逻辑:
Dim p as New createPizza
p.Crust = 2
p.pizzaCrust = 12345678
Dim price1 As Double = p.pizzaCrust
p.pizzaCrust = 12345678
Dim price2 As Double = p.pizzaCrust
price1
为1.5,price2
为12345678,因为pizzaCrust都使用Crust
的值并修改Crust
。您正在使用Crust
变量来获取地壳类型和地壳价格,而不区分它们。您应该将外壳类型存储在一个变量中,并将cust成本存储在另一个变量中(或者更好的是只编写一个函数,该函数根据1,2或3的外壳类型返回第一个成本。)