2011-11-09 28 views
0
Public Class Form1 
Dim intTicketChoice As Integer 
Dim finalCost As Decimal 
Dim cost As Decimal 
Dim seatType As Integer 


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Threading.Thread.Sleep(5000) 
End Sub 

Private Sub cboTypeOfTicket_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboTypeOfTicket.SelectedIndexChanged 

    intTicketChoice = Me.cboTypeOfTicket.SelectedIndex 
    Me.ListBox1.Items.Clear() 
    EnableObjects() 

    Select Case intTicketChoice 
     Case 0 
      SingleGame(seatType) 
     Case 1 
      Season(seatType) 
    End Select 
End Sub 

Sub EnableObjects() 
    lblNumTickets.Visible = True 
    txtNumOfTickets.Visible = True 
    lblSeatType.Visible = True 
    ListBox1.Visible = True 
    lblAnswerText.Visible = False 
    lblCost.Visible = False 
    btnClear.Visible = True 
    btnCompute.Visible = True 
End Sub 

Private Sub SingleGame(ByVal seatType As Integer) 

    Me.ListBox1.Items.Add("Box Seats $55") 
    Me.ListBox1.Items.Add("Lower Deck Seats $35") 
    Me.ListBox1.Items.Add("Upper Deck Seats $25") 
    Me.ListBox1.Items.Add("Standing Room Only $15") 


    If ListBox1.SelectedItem = "Box Seats $55" Then 
     seatType = 0 
    ElseIf ListBox1.SelectedItem = "Lower Deck Seats $35" Then 
     seatType = 1 
    ElseIf ListBox1.SelectedItem = "Upper Deck Seats $25" Then 
     seatType = 2 
    ElseIf ListBox1.SelectedItem = "Standing Room Only $15" Then 
     seatType = 3 
    End If 

End Sub 

Private Sub Season(ByVal seatType As Integer) 

    Me.ListBox1.Items.Add("Box Seats $2500") 
    Me.ListBox1.Items.Add("Lower Deck Seats $1500") 


    If ListBox1.SelectedItem = "Box Seats $2500" Then 
     seatType = 4 
    Elseif ListBox1.SelectedItem = "Lower Deck Seats $1500" Then 
     seatType = 5 
    End If 

End Sub 

Private Sub btnCompute_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCompute.Click 
    Dim ticketNum As Integer 

    ticketNum = Convert.ToInt32(txtNumOfTickets.Text) 
    intTicketChoice = cboTypeOfTicket.SelectedIndex 

    Dim totalCost As Decimal = GetGameCost(ticketNum) 


    Try 
     ticketNum = Convert.ToInt32(txtNumOfTickets.Text) 
    Catch Exception As FormatException 
     MsgBox("Number of tickets must be numeric") 
     Return 

    End Try 


    'Display cost: 
    lblAnswerText.Visible = True 
    Me.lblCost.Text = totalCost.ToString("C") 
    lblCost.Visible = True 


End Sub 

Private Function GetGameCost(ByVal ticketNum As Integer) 

    If seatType = 0 Then 
     finalCost = (ticketNum * 55D) 
    ElseIf seatType = 1 Then 
     finalCost = (ticketNum * 35D) 
    ElseIf seatType = 2 Then 
     finalCost = (ticketNum * 25D) 
    ElseIf seatType = 3 Then 
     finalCost = (ticketNum * 15D) 
    ElseIf seatType = 4 Then 
     finalCost = (ticketNum * 2500D) 
    ElseIf seatType = 5 Then 
     finalCost = (ticketNum * 1500D) 
    End If 
    Return finalCost 
End Function 

末级棒球票 - VB - 没有计算出正确的价格?

嗨,大家好,我卡在我的VB的功课。我是新手,所以不要把我撕成碎片,嘿嘿。无论如何,每次我尝试计算,它似乎给我55 * ticketnum而不是查找实际的seatType并使用那个。我在这里看到关于同样问题的另一个问题,但找不到我确切问题的答案。

任何想法或建议?

回答

0

我们不会给你撕撕成碎片,它实际上是一个欢乐拿到一门功课的问题,其中海报实际上已经东西,而不是转储分配的问题在这里逐字,期待被娇生惯养: - )

在这种情况下,我会看的事实,你通过值传递seatTypeSingleGameSeason

这意味着只会对本地副本进行任何更改,而不是对象变量。对象变量将保持初始值为零,因此,当您来计算价格时,它总是乘以55.

要么通过引用传递,以便将更改反射回对象变量,要么只需使用对象变量本身(通过不传递它作为参数)。

+0

我用byRef取代了byVal,我仍然有同样的问题。我决定只是删除byref和val的,我想应该有一个Me.seatType在某个地方?但我不知道在哪里......感谢TON帮助btw! – sparkey