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

3
这个程序的目的是遍历一系列的pictureboxes,并将它们的.image属性设置为特定的图像。我一直收到错误信息“对象引用未设置到对象的实例”。这个错误来自于这一行代码:“DirectCast(Me.Controls(pic(i)), PictureBox).Image = My.Resources.glass_buttonred”...奇怪的是,如果我将这段代码移到for循环之外,它就可以正常运行。
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim pic(2) As Object

    For i = 0 To 2
        pic(i) = "picturebox" + Convert.ToString(i)

        DirectCast(Me.Controls(pic(i)), PictureBox).Image = My.Resources.glass_buttonred
    Next

    Label1.Text = pic(1)
End Sub

以下是可用的代码,谢谢!希望它能帮助其他想将字符串转换为控件对象的人。

Dim pic(2) As Object

For i = 0 To 2
    pic(i) = "picturebox" + Convert.ToString(i + 1)

    DirectCast(Me.Controls(pic(i)), PictureBox).Image = My.Resources.glass_buttonred
Next

Label1.Text = pic(1)

请问Pic Box的确切名称是什么,你有多少个? - Ňɏssa Pøngjǣrdenlarp
名字只是PictureBox和3.. - user2824324
1个回答

3
问题可能是因为 Me.Controls 区分大小写。 如果您使用设计器构建这些内容,则可能需要:

' Note the upper case letters below
pic(i) = "PictureBox" + (i + 1).ToString()
DirectCast(Me.Controls(pic(i)), PictureBox).Image ' ...

默认情况下,设计师会将控件命名为“PictureBox1”(第一个)和“PictureBox2”(第二个),大小写有关。


不是VB.NET设计师,它会将第一个字母大写。 - Hans Passant
@HansPassant 谢谢 - 忘记了 - 已经修复。 - Reed Copsey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接