Для нескольких проектов теперь у меня была эта ошибка, вспышка и полностью заземление моих проектов. В большинстве случаев я просто должен был оставить их и начать новый, другой. В принципе, я просто хочу иметь возможность ссылаться на каждый объект формы, соответствующий определенным критериям. В этом случае это аркадная игра с четырьмя различными режимами игры. Существует таймер, который создает объекты для съемки, и он отлично работает, либо PictureBox, либо ярлык в зависимости от того, в каком режиме. при создании он изменяет метку каждого объекта на «Obj» & независимо от номера фигуры/математики с пространством между ними. Но по какой-то причине он не будет создавать массив сортов в другом событии таймера, чтобы переместить их.Переменная объекта или с переменной блока не задана (массивы)
Мне просто нужно, чтобы вы могли постоянно добавлять и удалять объекты для съемки, добавление и перемещение и удаление выполнялись нормально, но, как и во всех других случаях с массивами, эта ошибка просто проникает в меня и меня и мой квалифицированный преподаватель IPT не может понять это. Почему это внезапно начинает это делать и как я могу это исправить? Прикрепленный является некоторым кодом для события перемещения объекта.
Dim NumofObjsLeft As Integer = 0
For Each obj As Object In Me.Controls
If obj.Tag.Contains("Obj") Then
NumofObjsLeft += 1
If NumofObjsLeft <= 0 Then
Wav += 1
WaveStart = True
End If
Select Case GameMode
Case "Protector"
Select Case Curry
Case "Shapes"
If TypeOf obj Is PictureBox AndAlso obj.Tag.Contains("Obj") Then
obj.Left += 15
End If
Case "Maths"
If TypeOf obj Is Label AndAlso obj.tag.Contains("Obj") Then
obj.Left += 15
End If
End Select
EDIT: Просто подумал, что я бы добавил весь код для Shape Spawn и Move. Я еще не закончил вторую половину кода для Shape Move, потому что я не мог заставить первую часть работать.
Private Sub tmrShapeSpawn_Tick(sender As System.Object, e As System.EventArgs) Handles tmrShapeSpawn.Tick
If WaveStart = True Then
Select Case Wav
Case 1
NumofObjs = Wave1
Case 2
NumofObjs = Wave2
Case 3
NumofObjs = Wave3
Case 4
NumofObjs = Wave4
Case 5
NumofObjs = Wave5
Case 6
NumofObjs = Wave6
End Select
If F < NumofObjs Then
Dim newPic As PictureBox = New PictureBox
Dim newLab As Label = New Label
Dim CorrectLabel As Label = New Label
Dim CorrectPictureBox As PictureBox = New PictureBox
CorrectPictureBox.Height = 75
CorrectPictureBox.Width = 100
CorrectLabel.AutoSize = True
CorrectLabel.BackColor = Color.Transparent
CorrectPictureBox.BackColor = Color.Transparent
CorrectPictureBox.SizeMode = PictureBoxSizeMode.Zoom
CorrectLabel.ForeColor = Color.Blue
CorrectLabel.Font = New Font("Goudy Stout", 60, FontStyle.Regular)
Select Case GameMode
Case "Protector"
Randomize()
If CorrectMade = False Then
CorrectLabel.Left = CorrectLabel.Width
CorrectPictureBox.Left = CorrectPictureBox.Width
CorrectLabel.Top = Int(Rnd() * (Me.Height - CorrectLabel.Height))
CorrectPictureBox.Top = Int(Rnd() * (Me.Height - CorrectPictureBox.Height))
End If
newLab.Left = newLab.Width
newPic.Left = newPic.Width
newLab.Top = Int(Rnd() * (Me.Height - newLab.Height))
newPic.Top = Int(Rnd() * (Me.Height - newPic.Height))
Case "Catcher"
Randomize()
If CorrectMade = False Then
CorrectLabel.Top = CorrectLabel.Height
CorrectPictureBox.Top = CorrectPictureBox.Height
CorrectLabel.Left = Int(Rnd() * (Me.Width - CorrectLabel.Width))
CorrectPictureBox.Left = Int(Rnd() * (Me.Width - CorrectPictureBox.Width))
End If
newLab.Top = newLab.Height
newPic.Top = newPic.Height
newLab.Left = Int(Rnd() * (Me.Width - newLab.Width))
newPic.Left = Int(Rnd() * (Me.Width - newPic.Width))
End Select
Select Case Curry
Case "Maths"
lblCriteria.Text = lstNum1.Items.Item(Wav - 1) & " " & lstOp.Items.Item(Wav - 1) & " " & lstNum2.Items.Item(Wav - 1) & " ="
If CorrectMade = False Then
CorrectLabel.Text = lstAns.Items.Item(Wav - 1)
CorrectLabel.Tag = "Obj " & lstAns.Items.Item(Wav - 1)
Me.Controls.Add(CorrectLabel)
CorrectLabel.BringToFront()
End If
Randomize()
newLab.Text = Int(Rnd() * 100)
newLab.Tag = "Obj " & newLab.Text
Me.Controls.Add(CorrectLabel)
CorrectLabel.BringToFront()
Case "Shapes"
Dim epahs As Integer
Dim sap As String
lblCriteria.Text = lstShape.Items.Item(Wav - 1)
If CorrectMade = False Then
CorrectPictureBox.ImageLocation = "Shapes\" & lstShape.Items.Item(Wav - 1) & ".png"
CorrectPictureBox.Tag = "Obj " & lstShape.Items.Item(Wav - 1)
Me.Controls.Add(CorrectPictureBox)
CorrectPictureBox.BringToFront()
End If
Randomize()
epahs = Int(Rnd() * 9)
Select Case epahs
Case 0
sap = "Square"
Case 1
sap = "Circle"
Case 2
sap = "Triangle"
Case 3
sap = "Rectangle"
Case 4
sap = "Oval"
Case 5
sap = "Hexagon"
Case 6
sap = "Star"
Case 7
sap = "Diamond"
Case 8
sap = "Trapezium"
Case 9
sap = "Rhombus"
End Select
newPic.ImageLocation = "Shapes\" & sap & ".png"
newPic.Tag = "Obj " & sap
newPic.SizeMode = PictureBoxSizeMode.Zoom
Me.Controls.Add(newPic)
newPic.BringToFront()
End Select
CorrectMade = True
F += 1
Else
WaveStart = False
End If
End If
End Sub
Private Sub tmrShapeMove_Tick(sender As System.Object, e As System.EventArgs) Handles tmrShapeMove.Tick
Dim CBA As Integer
Dim NumofObjsLeft As Integer = 0
For Each obj As Object In Me.Controls
If obj.Tag.Contains("Obj") Then
NumofObjsLeft += 1
If NumofObjsLeft <= 0 Then
Wav += 1
WaveStart = True
End If
Select Case GameMode
Case "Protector"
Select Case Curry
Case "Shapes"
If TypeOf obj Is PictureBox AndAlso obj.Tag.Contains("Obj") Then
obj.Left += 15
End If
Case "Maths"
If TypeOf obj Is Label AndAlso obj.tag.Contains("Obj") Then
obj.Left += 15
End If
End Select
For CBA = 0 To ABC Step 1
If Collision(obj, Missile(CBA)) Then
Missile(CBA).Visible = False
Missile(CBA).Enabled = False
If picExplosion1.Visible = True And picExplosion2.Visible = False And picExplosion3.Visible = False Then
picExplosion2.Visible = True
tmrExplosion2.Start()
CentreOn(obj, picExplosion2)
ElseIf picExplosion1.Visible = True And picExplosion2.Visible = True And picExplosion3.Visible = False Then
picExplosion3.Visible = True
tmrExplosion3.Start()
CentreOn(obj, picExplosion3)
ElseIf picExplosion1.Visible = False Then
picExplosion1.Visible = True
tmrExplosion1.Start()
CentreOn(obj, picExplosion1)
Else
End If
If obj.Tag.Contains(lblCriteria.Text) Then
lblScore.Text += 1
Else
lblLives.Text -= 1
End If
Me.Controls.Remove(obj)
End If
Next CBA
Case "Catcher"
Select Case Curry
Case "Shapes"
If TypeOf obj Is PictureBox AndAlso obj.Tag.Contains("Obj") Then
obj.Top += 15
End If
Case "Maths"
If TypeOf obj Is Label AndAlso obj.Tag.Contains("Obj") Then
obj.Top += 15
End If
End Select
If Collision(obj, picChar) Then
If obj.Tag.Contains(lblCriteria.Text) Then
Score += 1
Else
Lives -= 1
End If
Me.Controls.Remove(obj)
End If
End Select
End If
Next obj
End Sub
На какой строке появляется ошибка? –
Ошибка в основном говорит: «Этот объект больше не существует». Это может быть не obj, а свойство obj (например, obj.Tag или Me.Controls). – StingyJack
Это сообщение об ошибке является сообщением об ошибке VB6, а не VB.NET – Plutonix