【问题标题】:Trying to assign pictures to PictureBoxes in VB尝试将图片分配给VB中的PictureBoxes
【发布时间】:2015-06-21 22:10:02
【问题描述】:

我正在尝试创建一个简单的游戏,首先它需要随机加载 16 个带有图像的 PictureBox。我不确定问题出在哪里。

Public Class Form1

Private picArrows() As PictureBox = {pic11, pic12, pic13, pic14,
                                     pic21, pic22, pic23, pic24,
                                     pic31, pic32, pic33, pic34,
                                     pic41, pic42, pic43, pic44}

Private Sub btnNew_Click(sender As Object, e As EventArgs) Handles btnNew.Click
    'starts a new game

    'declares RNG 
    Dim randGen As New Random

    'uses RNG to determine arrow placement
    For intPicBox As Integer = 0 To 15
        Select Case randGen.Next(1, 5)
            Case 1
                picArrows(intPicBox).Image = My.Resources.Up
            Case 2
                picArrows(intPicBox).Image = My.Resources.Right
            Case 3
                picArrows(intPicBox).Image = My.Resources.Down
            Case 4
                picArrows(intPicBox).Image = My.Resources.Left
        End Select
    Next
End Sub
End Class

我在案例 X 之后的行上收到 NullReferenceException 错误。有人知道我在做什么错吗?

【问题讨论】:

标签: vb.net visual-studio-2012


【解决方案1】:

I get a NullReferenceException error on the line after Case X

你不能像这样初始化你的数组:

Public Class Form1

    Private picArrows() As PictureBox = {pic11, pic12, pic13, pic14,
                                     pic21, pic22, pic23, pic24,
                                     pic31, pic32, pic33, pic34,
                                     pic41, pic42, pic43, pic44}

Form 还没有被初始化,所以它和它上面的所有控件还没有被创建。结果,所有这些控件引用都将是Nothing,留下一个充满Nothings 的数组。结果是NullReferenceException,因为Nothing 没有Image 属性。

您可以在此处声明该数组,但您只能在表单的构造函数运行后初始化它 (Sub New)。表单加载是个好地方:

Public Class Form1

    Private picArrows As PictureBox()        

        ' for best results you should use the same RNG over and over too:
        Private randGen As New Random()
         ...
        Private Sub Form_Load(....

            picArrows = New PictureBox() {pic11, pic12, pic13, pic14,
                                 pic21, pic22, pic23, pic24,
                                 pic31, pic32, pic33, pic34,
                                 pic41, pic42, pic43, pic44}

另见NullReference Exception in Visual Basic

【讨论】:

  • 哦,呵呵,现在我看到了,我意识到那是多么愚蠢。谢谢!
【解决方案2】:

没有伴随数组的排列略有不同:

Private Sub btnNew_Click(sender As Object, e As EventArgs) Handles btnNew.Click
    With New Random
        For col = 1 To 4
            For row = 1 To 4
                CType(Controls(String.Format("pic{0}{1}", col, row)), PictureBox).Image = {My.Resources.Up, My.Resources.Right, My.Resources.Down, My.Resources.Left}(.Next(0, 4))
            Next
        Next
    End With
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    相关资源
    最近更新 更多