2013-05-03 44 views
1

我想在Visual Basic中編寫一個簡單的程序,它通過一個類傳遞一個變量,計算它,然後返回它。我的表格「披薩」有兩組,每組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

PizTotal功能僅返回Size + Crust因爲你pizzaSizepizzaCrust屬性返回的SizeCrust尊重的價值結構延續。我可以看到你的代碼必須計算你的財產設置的成本,但你永遠不要呼籲安裝人員pizzaSizepizzaCrust,所以成本永遠不會計算。

您的pizzaSizepizzaCrust屬性並沒有太大的意義。例如,地殼屬性設置將價格作爲輸入,但如果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的地殼類型的成本)。

+0

智能感知它轉換爲 '昏暗數p作爲新createPizza createPizza.Crust = 2 createPizza.pizzaCrust = 12345678種 昏暗價格1作爲雙人= createPizza.pizzaCrust createPizza.pizzaCrust = 12345678個 昏暗price2作爲雙人= createPizza.pizzaCrust ' 不會繞過「pizzaCrust」和「pizzaSize」嗎? – rpcob 2013-05-03 16:53:30

0

我已經更新類以適應VBA。

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