VB中如何让PictureBox向下移动 数组索引越界错误如何解决
问题原因分析
索引超出数组边界错误的直接原因是你访问bricks(i)时,i的取值不在bricks数组的合法索引范围内。你在Form_Load中定义的bricks数组共8个PictureBox元素,VB.NET中数组默认从0开始索引,合法的i值只能是0~7,只要i小于0或者≥8就会触发该错误。
修复方案
- 首先检查变量
i的取值逻辑:- 如果你是循环遍历所有砖块实现整体下移,循环范围必须写为
For i = 0 To bricks.Length - 1,不要硬编码上限为8,避免数组元素数量变动后同步出错 - 如果
i是单独维护的变量,检查是否在其他逻辑中被误修改,比如累加后没有做边界校验就直接访问数组
- 如果你是循环遍历所有砖块实现整体下移,循环范围必须写为
- 你现有砖块移动的代码可以简化,避免重复判断赋值,修改后参考如下:
' 先判断球是否碰到左右墙 If lblball.Location.X >= Me.ClientSize.Width - lblball.Width OrElse lblball.Location.X = 0 Then Dim newbrickx, newbricky As Integer newbrickx = bricks(i).Location.X newbricky = bricks(i).Location.Y + 10 bricks(i).Location = New Point(newbrickx, newbricky) End If
- 可以在访问数组前加边界校验,避免运行时崩溃:
' 访问数组前先判断i是否合法 If i >=0 AndAlso i < bricks.Length Then ' 原有移动逻辑写在这里 End If
原始代码参考
砖块移动逻辑代码
Dim newbrickx, newbricky As Integer newbrickx = bricks(i).Location.X newbricky = bricks(i).Location.Y + 10 'left wall If (lblball.Location.X >= Me.ClientSize.Width - lblball.Width) Then bricks(i).Location = New Point(newbrickx, newbricky) End If 'right wall If (lblball.Location.X = 0) Then bricks(i).Location = New Point(newbrickx, newbricky) End If
数组定义代码
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load bricks = New PictureBox() {PictureBox1, PictureBox2, PictureBox3, PictureBox4, PictureBox5, PictureBox6, PictureBox7, PictureBox8} End Sub
内容的提问来源于stack exchange,提问作者Lawrence Spicher
相关产品推荐
相关产品推荐

