VB.NET自动加载图片赋值PictureBox时触发未处理ArgumentException异常求解
问题根因
- 资源缺失导致无效赋值:你的循环要加载72张图片,对应的资源名是
_0、_5、_10……直到_355,如果你的项目资源里不存在下标≥62对应的资源(也就是_305及以上步长为5的命名图片),My.Resources.ResourceManager.GetObject会返回空值,将空值赋值给PictureBox的Image属性就会触发System.ArgumentException报错。 - 数组长度不足:如果你声明Image数组时的最大下标小于72,访问62~72下标时本应触发索引越界错误,但若有异常捕获逻辑吞掉了越界错误,最终也可能表现为赋值时的参数异常。
修复步骤
- 先给资源加载逻辑加校验,确认是否存在缺失资源,修改加载代码如下:
Dim Count2 As Integer = 1 Dim ImageCount As Integer = 0 ' 请先确认你的Image数组声明长度足够,例如 Dim Image(72) As Image For Count2 = 1 To 72 Dim resObj = My.Resources.ResourceManager.GetObject("_" + ImageCount.ToString) ' 校验资源是否存在 If resObj Is Nothing Then MessageBox.Show("缺失资源:_" & ImageCount.ToString & ",对应数组下标:" & Count2.ToString) Exit For End If ' 校验资源是否为有效图片类型 If Not TypeOf resObj Is Image Then MessageBox.Show("资源_" & ImageCount.ToString & "不是有效图片类型") Exit For End If Image(Count2) = CType(resObj, Image) ImageCount = ImageCount + 5 Next Count2
- 根据第一步的提示补全缺失的资源,或者调整循环次数匹配实际的资源数量。
- 给PictureBox赋值逻辑加非空判断,避免运行时崩溃:
If CurrentImage >= 1 AndAlso CurrentImage <= 72 AndAlso Image(CurrentImage) IsNot Nothing Then picMyShip.Image = Image(CurrentImage) End If
内容的提问来源于stack exchange,提问作者user15904414
相关产品推荐
相关产品推荐

