【发布时间】:2015-04-16 11:46:39
【问题描述】:
我正在为课堂工作的这个 VB 程序遇到一个奇怪的问题。老实说,我不完全确定我为什么会遇到这个问题,因为我已经轻松完成了与此相对相似的其他任务。该程序旨在允许我将某些电影从商店(左侧列表框)添加到购物车(右侧列表框)。您可以看到我添加了两次蜘蛛侠(因为谁不喜欢蜘蛛侠?) 并且每次都正确显示了名称和 $2。但是,每次我将电影添加到框中时,底部的第一个标签框都应该累积,但它在我选择的第一部电影时保持不变。如果我要选择任何其他更昂贵的电影,它仍然会停留在我选择的第一部电影。
编辑:我应该补充一点,在将代码的某些部分移到各自的函数中之前,我遇到了同样的问题。
公共类主窗体
Public strMovies() As String =
{"Spider-Man", "Daredevil", "Hulk", "The Punisher", "Spider-Man 2",
"Fantastic Four", "Spider-Man 3", "Iron Man", "The Amazing Spider-Man", "The Wolverine"}
Public intMoviePrices() As Integer =
{2, 4, 6, 8, 10, 12, 14, 16, 18, 20}
Dim X As Integer
Dim Y As Integer
Dim moviecost As Integer
Dim movietax As Double
Dim numberdvds As Integer
Dim shippingcharge As Double
Dim netcost As Double
Dim movieChoice As String
Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstCom.SelectedIndexChanged
End Sub
Public Function calculateTotals(movieChoice) As Integer
moviecost = moviecost + intMoviePrices(movieChoice)
movietax = (moviecost * 1.04) - moviecost
If numberdvds >= 5 Then
shippingcharge = 5
Else
shippingcharge = numberdvds
End If
netcost = movietax + moviecost + shippingcharge
lblgrosscost.Text = moviecost
lblsalestax.Text = FormatNumber(movietax, 2)
lblshipping.Text = shippingcharge
lblnetcost.Text = netcost
Return moviecost
Return movietax
End Function
Public Function addMovie() As String
movieChoice = lstCom.SelectedIndex
For X = LBound(strMovies) To UBound(strMovies)
If lstCom.SelectedIndex = X Then
lstCom2.Items.Add(strMovies(X) & " $" + intMoviePrices(movieChoice).ToString)
numberdvds += 1
Call calculateTotals(movieChoice)
End If
Next
End Function
Public Function removeMovie() As String
For X = LBound(strMovies) To UBound(strMovies)
If lstCom2.SelectedIndex = X Then
lstCom2.Items.Remove(lstCom2.SelectedItem)
numberdvds -= 1
Call calculateTotals(movieChoice)
End If
Next
End Function
Private Sub mainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
lstCom.Items.Add("Spider-Man")
lstCom.Items.Add("Daredevil")
lstCom.Items.Add("Hulk")
lstCom.Items.Add("The Punisher")
lstCom.Items.Add("Spider-Man 2")
lstCom.Items.Add("Fantastic Four")
lstCom.Items.Add("Spider-Man 3")
lstCom.Items.Add("Iron Man")
lstCom.Items.Add("The Amazing Spider-Man")
lstCom.Items.Add("The Wolverine")
lstCom.SelectedIndex = 0
End Sub
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
Call addMovie()
End Sub
Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
Me.Close()
End Sub
Private Sub btnRemove_Click(sender As Object, e As EventArgs) Handles btnRemove.Click
Call removeMovie()
End Sub
结束类
【问题讨论】:
-
您可能希望将标签从 VBA 更改为 VB.Net 或您正在使用的 Visual Basic 衍生版本,这不是 VBA 形式:)。
-
@Dan Donoghue 可能是在服用类固醇...
-
谢谢你,丹,这可能是我得到反对票的原因,或者因为这是一个愚蠢的问题。感谢您的帮助,我目前正在玩弄您的答案!
-
在
addMovie中,您需要将呼叫转移到IF 块之外的calculateTotals(movieChoice)。目前你所有的电影都是免费的,除了蜘蛛侠 -
@Baby 你应该被放在角落里说这样的话!
标签: vb.net