一系列图片框和资源图片

时间:2013-11-29 23:10:27

标签: arrays vb.net

嘿,我有以下代码:

Dim radarStrengthImages() As PictureBox = ({imgRadar_Strength1, imgRadar_Strength2, imgRadar_Strength3, imgRadar_Strength4, imgRadar_Strength5, imgRadar_Strength6, imgRadar_Strength7, imgRadar_Strength8})
Dim radarStrengthResourcesON() As Bitmap = ({My.Resources.radarON_16, My.Resources.radarON_17, My.Resources.radarON_18, My.Resources.radarON_19, My.Resources.radarON_20, My.Resources.radarON_21, My.Resources.radarON_22, My.Resources.radarON_23})
Dim radarStrengthResourcesOFF() As Bitmap = ({My.Resources.radar_16, My.Resources.radar_17, My.Resources.radar_18, My.Resources.radar_19, My.Resources.radar_20, My.Resources.radar_21, My.Resources.radar_22, My.Resources.radar_23})

imgRadar_StrengthX 是表单上图片框的名称, My.Resources.radar_XX 是图片框的图片。

但是,当我使用此代码时:

Dim intX As Integer = 0

Do Until intX = 8
    radarStrengthImages(intX).Image = radarStrengthResourcesON(intX)
    intX += 1
Loop

我收到错误:

未将对象引用设置为对象的实例

就像这样:

radarStrengthImages(intX).Image = radarStrengthResourcesON(intX)

2 个答案:

答案 0 :(得分:1)

问题是这个数组从索引0开始,你有8个项目

将循环更改为

   Do Until intX = 7

现在应该可以了

或者如果数组会及时更改,请使用变量来处理最大值

Module Module1

Sub Main()
    Dim intX As Integer = 0

    Dim test(7) As Integer '8 item
    Dim max = test.Length - 1

    Do Until intX = max
        intX += 1
    Loop

    Console.WriteLine("intX: " & intX)
    Console.ReadKey()

End Sub

End Module

答案 1 :(得分:1)

这种代码无法正常工作,初始化顺序始终是一个重要的细节。在之后运行InitializeComponent()方法时,您使用的变量不会得到值。但是在发生之前,数组已经初始化。所以你只需用Nothing,nada,zippo初始化它们。 “未设置对象引用”是您将获得的zippo异常。

稍后你必须这样做,这需要将数组的初始化程序移动到构造函数中。带有文本框的示例表单的通用语法:

Public Class Form1
    Dim boxes As TextBox()

    Public Sub New()
        InitializeComponent()
        boxes = New TextBox() {TextBox1, TextBox2, TextBox3}
    End Sub

End Class