2013-05-03 5 views
1

변수를 클래스를 통해 전달하고 계산 한 후 반환하는 간단한 프로그램을 Visual Basic으로 작성하려고합니다. 내 양식 "피자"에는 각각 3 개의 라디오 버튼이있는 2 개의 그룹이 있습니다. Total 버튼을 클릭하면 피자 크러스트 가격이 피자 크러스트 가격에 추가됩니다. 문제 해결을 통해 "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을 반환 ively. 속성 설정에서 비용을 계산하는 코드를 볼 수는 있지만 결코 계산되지 않도록 pizzaSizepizzaCrust에 대한 세터를 절대 호출하지 마십시오.

pizzaSizepizzaCrust 속성은별로 의미가 없습니다. 예를 들어, 크러스트 속성 설정은 가격으로 입력되지만, Crust이 1, 2 또는 3이면 가격을 다시 설정 한 다음 Crust 변수에 가격을 저장합니다. 다음과 같은 논리를 쓴 경우 : price1에서

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 

을 1.5되며 pizzaCrust 모두 Crust의 값을 사용하고 Crust을 수정하기 때문에 price2은 12,345,678 될 것입니다. 너는 지각 유형 및 빵 껍질 가격 둘 다를 위해 Crust 가변을 사용하고 그 (것)들을 구별하지 않는다. 하나의 변수에 크러스트 유형을 저장하고 다른 변수에 사용자 비용을 저장해야합니다 (또는 크러스트 유형 1,2 또는 3을 기준으로 최하위 비용을 반환하는 함수를 작성하는 것).

+0

인텔리 더블 = createPizza.pizzaCrust으로 두 번 = createPizza.pizzaCrust 새로운 createPizza으로 '희미한 페이지에 createPizza.pizzaCrust = 12345678 희미한 price2을 createPizza.Crust = 2 createPizza.pizzaCrust은 = 12345678 희미한 price1 그것을 변환 ' 'pizzaCrust'와 'pizzaSize'를 완전히 우회하지 않겠습니까? – rpcob

0

나는 VBA에 대한 맞게 클래스를 업데이트했습니다.

클래스 createPizza 당신의 pizzaSizepizzaCrust 속성 SizeCrust 존중의 값을 반환하기 때문에

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 
관련 문제