Vb.net 如何使用数组在VB中创建数量可变的图片框?

Vb.net 如何使用数组在VB中创建数量可变的图片框?,vb.net,cookies,Vb.net,Cookies,我有下面的代码,正如你可能看到的,当用户按下按钮时,我试图使它获得他们想要的“巧克力片”的数量,并将它们放在表单上的某个范围内。我没有收到任何错误,但没有巧克力片显示 Private Sub cookiesButton_Click(sender As Object, e As EventArgs) Handles cookiesButton.Click Dim XCoord As Integer Dim YCoord As Integer Dim

我有下面的代码,正如你可能看到的,当用户按下按钮时,我试图使它获得他们想要的“巧克力片”的数量,并将它们放在表单上的某个范围内。我没有收到任何错误,但没有巧克力片显示

Private Sub cookiesButton_Click(sender As Object, e As EventArgs) Handles cookiesButton.Click
        Dim XCoord As Integer
        Dim YCoord As Integer
        Dim arraySize As Integer = Integer.TryParse(cookiesTextBox.Text, arraySize)
        Dim loopCount As Integer = 0
        Dim chipCount(arraySize) As PictureBox
        Do
            loopCount += 1
            If loopCount > arraySize Then Exit Do
            chipCount(loopCount) = New PictureBox
            Controls.Add(chipCount(loopCount))
            Do Until XCoord > 0 And YCoord > 0
                XCoord = (Rnd() * 10)
                YCoord = (Rnd() * 10)
            Loop
            chipCount(loopCount).Image = My.Resources.Chocolae_chip_
            If YCoord < 40 Then YCoord += 40
            If YCoord > 362 Then YCoord -= 40
            If XCoord < 116 Then XCoord += 116
            If XCoord > 408 Then XCoord -= 116
            chipCount(loopCount).Top = YCoord
            chipCount(loopCount).Width = 50
            chipCount(loopCount).Height = 50
            chipCount(loopCount).SizeMode = PictureBoxSizeMode.StretchImage
            chipCount(loopCount).Left = XCoord
            chipCount(loopCount).Visible = True

            ' --------------------------------------------------------

            XCoord = 0
            YCoord = 0
        Loop
    End Sub
Private子cookiesButton\u单击(发送者作为对象,e作为事件参数)处理cookiesButton。单击
作为整数的Dim XCoord
Dim YCoord作为整数
Dim arraySize As Integer=Integer.TryParse(cookiesTextBox.Text,arraySize)
Dim loopCount为整数=0
将芯片数量(阵列化)设置为PictureBox
做
循环计数+=1
如果loopCount>arraySize,则退出Do
chipCount(loopCount)=新的PictureBox
控件。添加(芯片计数(循环计数))
直到XCoord>0和YCoord>0为止
XCoord=(Rnd()*10)
YCoord=(Rnd()*10)
环
chipCount(loopCount).Image=My.Resources.Chocolae\u chip_
如果YCoord<40,则YCoord+=40
如果YCoord>362,则YCoord-=40
如果XCoord<116,则XCoord+=116
如果XCoord>408,则XCoord-=116
chipCount(loopCount).Top=YCoord
芯片数(循环计数)。宽度=50
芯片数(loopCount)。高度=50
chipCount(loopCount).SizeMode=PictureBoxSizeMode.StretchImage
芯片计数(loopCount)。左=XCoord
chipCount(loopCount).Visible=True
' --------------------------------------------------------
XCoord=0
YCoord=0
环
端接头

此行不正确:

Dim arraySize As Integer = Integer.TryParse(cookiesTextBox.Text, arraySize)
Integer.TryParse
返回True或False,具体取决于
cookiesTextBox.Text
是否成功解析为整数。当您将返回值指定给
arraySize
时,这些值将转换为-1或0。你应该写一些类似的东西

Dim arraySize As Integer
If Not Integer.TryParse(cookiesTextBox.Text, arraySize) Then
    ' TODO: Display an error message.
    Return
End If

刘先生比我先犯了特里帕斯错误,但有一种更干净的方法可以做到这一点。我会这样处理:

if Integer.TryParse(cookiesTextBox.Text, chipCount ) then

    For n as integer = 0 to chipCount 
       Dim pic as New PictureBox  

       With pic
          ' ... set all the properties
          .Image = My.Resources.Chocolae_chip_
          .Top = YCoord           ' etc etc etc
          ' ....
       End With
       Me.Contols.Add(pic)
    Next n
 End If
实际上不需要数组,因为它们将存在于控件集合中。For/Next循环比Do/loop好得多,因为您知道要循环多少次