Vb.net Visual Basic:未处理NullReferenceException

Vb.net Visual Basic:未处理NullReferenceException,vb.net,arrays,nullreferenceexception,unhandled-exception,Vb.net,Arrays,Nullreferenceexception,Unhandled Exception,我搞不清楚是什么引起的。对于“allSlotLabels(i).Image=imgCherries”行,错误报告显示“未设置对象变量或带块变量”。这一行和另一行没有什么不同,所以我猜这只是随机生成数字后首先发现的错误。任何帮助都将不胜感激,我完全被卡住了 Public Class frmSlotMachine ' Declare all variables needed Dim startingCoins As Integer = 5 Dim coins As Integer = starti

我搞不清楚是什么引起的。对于“allSlotLabels(i).Image=imgCherries”行,错误报告显示“未设置对象变量或带块变量”。这一行和另一行没有什么不同,所以我猜这只是随机生成数字后首先发现的错误。任何帮助都将不胜感激,我完全被卡住了

Public Class frmSlotMachine

' Declare all variables needed
Dim startingCoins As Integer = 5
Dim coins As Integer = startingCoins + 1
Dim numbersGenerated As Integer = 20
Dim spinStatus As String = "Start"
Dim held1 As Boolean = False
Dim held2 As Boolean = False
Dim held3 As Boolean = False
Dim slot1Name, slot2Name, slot3Name As String
Dim slot1Value, slot2Value, slot3Value As Integer
' Assign resources to variables
Dim imgBanana As Image = My.Resources.banana
Dim imgOrange As Image = My.Resources.orange
Dim imgSeven As Image = My.Resources.seven
Dim imgCherries As Image = My.Resources.cherries
Dim imgBatman As Image = My.Resources.batman
Dim imgCross As Image = My.Resources.cross
' Declare arrays
Dim allHelds() As Boolean = {held1, held2, held3}
Dim allSlotValues() As Integer = {slot1Value, slot2Value, slot3Value}
Dim allSlotNames() As String = {slot1Name, slot2Name, slot3Name}
Dim allSlotLabels() As Object = {lblSlot1, lblSlot2, lblSlot3}

Private Sub btnSpin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSpin.Click


    ' Trying a for loop to randomise numbers and assign images, if hold is off
    For i = 1 To 3
        If Not allHelds(i) Then
            allSlotValues(i) = Int(Rnd() * numbersGenerated + 0.5)
            Select Case allSlotValues(i)
                Case 0 To 5
                    allSlotLabels(i).Image = imgBanana
                    allSlotNames(i) = "Banana"
                Case 6 To 11
                    allSlotLabels(i).Image = imgOrange
                    allSlotNames(i) = "Orange"
                Case 12 To 16
                    allSlotLabels(i).Image = imgCherries
                    allSlotNames(i) = "Cherries"
                Case 17 To 19
                    allSlotLabels(i).Image = imgSeven
                    allSlotNames(i) = "Seven"
                Case 20
                    allSlotLabels(i).Image = imgBatman
                    allSlotNames(i) = "Batman"
                Case Else
                    allSlotLabels(i).Text = "Error. Current slot value = " & allSlotValues(i)
            End Select
        End If
    Next

怎么样:
对于i=0到2
。索引以0开始,而不是以1开始。

对于i=0到2,如何:
。索引以0开头,而不是以1开头。

按如下方式更改插槽的分配:

 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    allSlotLabels(0) = lblslot1
    allSlotLabels(1) = lblslot2
    allSlotLabels(2) = lblslot3
End Sub
循环到

 For i = 0 To 2

按如下方式更改插槽的分配:

 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    allSlotLabels(0) = lblslot1
    allSlotLabels(1) = lblslot2
    allSlotLabels(2) = lblslot3
End Sub
循环到

 For i = 0 To 2


谢谢,这可能解决了未来的问题。但主要问题依然存在。程序中可能还有一些其他的bug我还没有发现,但我稍后会解决它们。@SiliconCelery-它解决了您的主要问题。在失败的那一行,
i
将是3。当i发生时,它的值是多少?对于樱桃,它总是这样吗?既然你有rnd,它会发生在其他值还是rnd?你把那些标签设置成什么了吗,我在你的代码里看不到。。。但是你的代码非常有趣,你可能想重新设计整个程序,比如使用结构。我仍然得到完全相同的错误报告,ChrisF。我将尝试更改这些值,看看我得到了什么,zmilojko。我知道我的代码非常低效,但我只是在学习。一些数组是对我之前的20多个if语句的改进。我仍然问同样的问题:你是否将标签设置为某个值,或者它们是空的?谢谢,这可能解决了未来的问题。但主要问题依然存在。程序中可能还有一些其他的bug我还没有发现,但我稍后会解决它们。@SiliconCelery-它解决了您的主要问题。在失败的那一行,
i
将是3。当i发生时,它的值是多少?对于樱桃,它总是这样吗?既然你有rnd,它会发生在其他值还是rnd?你把那些标签设置成什么了吗,我在你的代码里看不到。。。但是你的代码非常有趣,你可能想重新设计整个程序,比如使用结构。我仍然得到完全相同的错误报告,ChrisF。我将尝试更改这些值,看看我得到了什么,zmilojko。我知道我的代码非常低效,但我只是在学习。还有一些数组是对我之前的20多个if语句的改进。我仍然问同样的问题:您是否将标签设置为某个值,或者它们是空的?发生异常时,
I
的值是多少?在将
lblSlot1
lblSlot2
lblSlot3
存储在数组中之前初始化它们的位置和目的是什么?很抱歉,我对这一点很陌生。如何在Visual Basic Studio中显示变量和步骤的值?我不知道标签是在哪里初始化的,我只是把它们拖放到我的表单上。发生异常时,
I
的值是多少?在将
lblSlot1
lblSlot2
lblSlot3
存储在数组中之前初始化它们的位置和目的是什么?很抱歉,我对这一点很陌生。如何在Visual Basic Studio中显示变量和步骤的值?我不知道标签是在哪里初始化的,我只是把它们拖放到我的表格上。是的,这就是答案。比我快一分钟。这背后的原因是在创建标签之前执行语句
Dim allslotlabel…
。当您到达
Form.Load
事件时,所有控件都已创建。是的,这就是答案。比我快一分钟。这背后的原因是在创建标签之前执行语句
Dim allslotlabel…
。当您到达
Form.Load
事件时,所有控件都已创建。