Я здесь в какой-то ситуации. У меня ошибка «index is out of bounds», и я не знаю, что ее вызывает. Я предполагаю, что это имеет какое-то отношение к тегам.Ошибка VB.NET-индекса за пределами
Обычно тег представляет собой число. Если я делю это число на количество столбцов, он возвращает мне строку кнопки, которую я нажал. Если я возьму мод этого тега, он должен вернуть мне столбец нажатой кнопки. Но что-то не так, и я не могу понять, что. Надеюсь, кто-то может помочь мне в этом. Заранее спасибо.
Public Class Form1
Dim AANTAL_KOLOMMEN As Integer = 8
Dim AANTAL_RIJEN As Integer = 8
Dim Button1 As Button
Dim tel As Boolean
Dim value1 As Integer
Dim value2 As Integer
Dim myButtons(AANTAL_RIJEN, AANTAL_KOLOMMEN) As Button
Public Function zetNieuw(rij As Integer, kolom As Integer) As Button
Dim nieuweKnop As New Button()
nieuweKnop.Width = 40
Me.Controls.Add(nieuweKnop)
nieuweKnop.Name = "Btn_" & rij & "_" & kolom
nieuweKnop.Left = kolom * nieuweKnop.Width
nieuweKnop.Top = rij * nieuweKnop.Width
nieuweKnop.Height = nieuweKnop.Width
nieuweKnop.Text = ""
AddHandler nieuweKnop.MouseDown, AddressOf Klik
If rij = 3 And kolom = 3 Then
nieuweKnop.BackColor = Color.Black
End If
If rij = 4 And kolom = 4 Then
nieuweKnop.BackColor = Color.Black
End If
If rij = 3 And kolom = 4 Then
nieuweKnop.BackColor = Color.White
End If
If rij = 4 And kolom = 3 Then
nieuweKnop.BackColor =
Color.White
End If
nieuweKnop.Tag = (kolom + (rij * AANTAL_KOLOMMEN))
Return nieuweKnop
End Function
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
For Me.value2 = 0 To AANTAL_RIJEN - 1 Step 1
For Me.value1 = 0 To AANTAL_KOLOMMEN - 1 Step 1
myButtons(value2, value1) = Me.zetNieuw(value2, value1)
Next
Next
End Sub
Private Sub Klik(sender As Object, e As MouseEventArgs)
Dim knop As Button = sender
Dim value As String = knop.Tag
If myButtons(Tag/AANTAL_KOLOMMEN, (Tag Mod AANTAL_KOLOMMEN) - 2).BackColor = Color.Black Or myButtons((Tag/AANTAL_KOLOMMEN - 2), Tag Mod AANTAL_KOLOMMEN).BackColor = Color.Black Or myButtons((Tag/AANTAL_KOLOMMEN) - 2, (Tag Mod AANTAL_KOLOMMEN) - 2).BackColor = Color.Black Then
knop.BackColor = Color.Black
ElseIf myButtons(Tag/AANTAL_KOLOMMEN, (Tag Mod AANTAL_KOLOMMEN) - 2).BackColor = Color.White Or myButtons((Tag/AANTAL_KOLOMMEN - 2), Tag Mod AANTAL_KOLOMMEN).BackColor = Color.White Or myButtons((Tag/AANTAL_KOLOMMEN) - 2, (Tag Mod AANTAL_KOLOMMEN) - 2).BackColor = Color.White Then
knop.BackColor = Color.Black
End If
End Sub
End Class
Эта ошибка в основном означает, что вы пытаетесь использовать индекс, который находится за пределами диапазона. Скажем, у вас есть 10 предметов в массиве, и вы просите элемент 13, он взорвется. Пройдите через код и проверьте, сколько у вас элементов и посмотрите, какой индекс вы вызываете. – logixologist
Помните, что индексы массива в .Net начинаются с 0, а не 1. –
Невозможно понять, что я делаю неправильно здесь. Вы уже потратили несколько часов на это и не можете найти его. – user2975965