0

Я не могу понять, что вызывает его. В отчете об ошибке говорится: «Объектная переменная или с заблокированной переменной блока». для строки «allSlotLabels (i) .Image = imgCherries». Эта строка ничем не отличается от другой, поэтому я предполагаю, что это просто ошибка, которую он взял первым после случайного генерирования числа. Любая помощь вообще была бы оценена, я полностью застрял.Visual Basic: исключение NullReferenceException было необработанным

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 
+1

Что такое значение 'i' в момент исключение? Где и до каких 'lblSlot1',' lblSlot2' и 'lblSlot3' инициализируются до их хранения в массиве? – PersonalNexus

+0

Прошу прощения, но я так новичок в этом. Как отображать значения моих переменных и шаг в Visual Basic Studio? И я не знаю, где эти метки были инициализированы, я просто потащил их и набросил на свою форму. – SiliconCelery

ответ

3

Как насчет: For i = 0 To 2. Индексы начинаются с 0, а не с 1.

+0

Спасибо, что, возможно, решил будущую проблему. Но основная проблема остается. Вероятно, есть еще несколько ошибок в программе, которую я еще не нашел, но я буду работать позже. – SiliconCelery

+0

@SiliconCelery - это решает вашу основную проблему. В строке, где она терпит неудачу, 'i' будет 3. – ChrisF

+0

Какова ценность i, когда это происходит, и всегда ли это для вишни, так как у вас есть rnd, это произойдет для других значений или rnd? Вы устанавливали эти ярлыки на что-то, я не вижу этого в вашем коде ... Но ваш код довольно, ну, интересный, и вы можете перепроектировать все это, используя, например, структуры. – zmilojko

3

изменить назначение слотов следующим образом:

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 
+0

Да, это ответ. Ударьте меня на минуту. – LarsTech

+0

Причина этого заключается в том, что инструкция 'Dim allSlotLabels ...' выполняется до создания меток. Когда вы достигнете события Form.Load, все элементы управления будут созданы. –

Смежные вопросы