You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:57:03