奇怪的错误(索引超出数组vb.net)
Strange error (index bound out of array vb.net)
我正在尝试创建一个包含 5 个元素的列表
Dim clickcount As Integer = 0
Dim clickindex(6) As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button5.Click, Button4.Click, Button6.Click
Dim btn As Button
btn = CType(sender, Button)
If btn.BackColor = Color.Red Then
btn.BackColor = Color.Green
Dim strList As List(Of Integer) = clickindex.ToList()
strList.Remove(btn.Tag)
clickindex = strList.ToArray()
clickcount -= 1
ElseIf btn.BackColor = Color.Green Then
If clickcount = 5 Then
MsgBox("Max Reach")
Exit Sub
End If
btn.BackColor = Color.Red
clickcount += 1
clickindex(clickcount) = btn.Tag
End If
End Sub
每点击一个按钮,就会将按钮编号添加到列表中,最多可点击5个按钮
当您再次点击该按钮时,它将从数组中删除按钮编号。
我的问题是,当我点击几次时,出现错误,提示Index bound out of array,但索引仍在范围内。
有人知道问题出在哪里吗?
问题来源:
你的问题出在这里:
Dim strList As List(Of Integer) = clickindex.ToList()
strList.Remove(btn.Tag)
clickindex = strList.ToArray()
看看下面的例子:
假设 clickindex 如下所示
clickindex = {1,0,3,0,0,0,0} 'Dim clickindex(6) As Integer declares an array with length '7'
在 Dim strList As List(Of Integer) = clickindex.ToList()
之后,strList 现在是一个 List of Integer
,有 7 个项目:{1,0,3,0,0,0,0}
strList.Remove(btn.Tag)
'strList is nog a List of Integer with 6 Items (btn.Tag has been removed)
clickIndex = lst.ToArray()
'ClickIndex is now an Array with 6 items instead of the original 7
可能的解决方案
为什么不直接使用以下(更简单的)代码:
Dim clickindex As new List(Of Integer)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button5.Click, Button4.Click, Button6.Click
Dim btn As Button
btn = CType(sender, Button)
If btn.BackColor = Color.Red Then
btn.BackColor = Color.Green
strList.Remove(btn.Tag)
ElseIf btn.BackColor = Color.Green Then
If strList.Count >= 5 Then
MsgBox("Max Reach")
Exit Sub
End If
btn.BackColor = Color.Red
strList.Add(btn.Tag)
End If
End Sub
我正在尝试创建一个包含 5 个元素的列表
Dim clickcount As Integer = 0
Dim clickindex(6) As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button5.Click, Button4.Click, Button6.Click
Dim btn As Button
btn = CType(sender, Button)
If btn.BackColor = Color.Red Then
btn.BackColor = Color.Green
Dim strList As List(Of Integer) = clickindex.ToList()
strList.Remove(btn.Tag)
clickindex = strList.ToArray()
clickcount -= 1
ElseIf btn.BackColor = Color.Green Then
If clickcount = 5 Then
MsgBox("Max Reach")
Exit Sub
End If
btn.BackColor = Color.Red
clickcount += 1
clickindex(clickcount) = btn.Tag
End If
End Sub
每点击一个按钮,就会将按钮编号添加到列表中,最多可点击5个按钮 当您再次点击该按钮时,它将从数组中删除按钮编号。
我的问题是,当我点击几次时,出现错误,提示Index bound out of array,但索引仍在范围内。 有人知道问题出在哪里吗?
问题来源:
你的问题出在这里:
Dim strList As List(Of Integer) = clickindex.ToList()
strList.Remove(btn.Tag)
clickindex = strList.ToArray()
看看下面的例子: 假设 clickindex 如下所示
clickindex = {1,0,3,0,0,0,0} 'Dim clickindex(6) As Integer declares an array with length '7'
在 Dim strList As List(Of Integer) = clickindex.ToList()
之后,strList 现在是一个 List of Integer
,有 7 个项目:{1,0,3,0,0,0,0}
strList.Remove(btn.Tag)
'strList is nog a List of Integer with 6 Items (btn.Tag has been removed)
clickIndex = lst.ToArray()
'ClickIndex is now an Array with 6 items instead of the original 7
可能的解决方案
为什么不直接使用以下(更简单的)代码:
Dim clickindex As new List(Of Integer)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button5.Click, Button4.Click, Button6.Click
Dim btn As Button
btn = CType(sender, Button)
If btn.BackColor = Color.Red Then
btn.BackColor = Color.Green
strList.Remove(btn.Tag)
ElseIf btn.BackColor = Color.Green Then
If strList.Count >= 5 Then
MsgBox("Max Reach")
Exit Sub
End If
btn.BackColor = Color.Red
strList.Add(btn.Tag)
End If
End Sub