2014-01-16 44 views
1

因此,我写了一小段代码将6个图片框添加到随机位置的表单中。它将每个picturebox添加到一个集合中,然后遍历集合并将它们添加到表单控件中。奇怪的问题是,只有在调试模式下逐行执行代码时,代码才能正常工作。如果我只编译并运行代码,那么只有1个图片框被添加到表单中,但是如果我逐行逐行浏览代码,那么所有6个图片框都会成功添加到随机位置的表单中。有谁能告诉我为什么会发生这样的事情?这让我变得非常坚果。代码如下:在vb.net中以编程方式添加多个图片框

For i As Integer = 0 To 5 
     Dim pic As New PictureBox 
     Dim rnd As New Random 
     pic.Location = New Point(rnd.Next(200, 300), rnd.Next(200, 300)) 
     pic.Size = New Size(5, 5) 
     pic.BackColor = Color.White 
     pic.Visible = True 
     pic.BringToFront() 
     _picCollection.Add(pic) 
    Next 

    For Each item As PictureBox In _picCollection 
     Controls.Add(item) 
    Next 

    ShowDialog() 

开放的建议如何更好地做到这一点/以一种实际上正常工作的方式。

+0

尝试在循环外声明'rnd'一次。有可能是用相同的种子进行声明,因此每次都会返回相同的值。 – tinstaafl

+0

Rnd正常工作,每个图片框正在创建不同的随机坐标。我一定要检查一下。当我在调试模式下遍历它时,代码工作正常。 – pvdev

+2

这种差异可能是因为自动种子的基础,我相信,在一天的时间。当你在VS之外运行时,它的运行速度会更快,这可能意味着调试将显示你获得了不同的数字,但发布的版本获得相同的数字。无论哪种方式,在循环外声明一个Random对象通常会更有意义,并且是一个非常简单而容易测试的事情。 – tinstaafl

回答

1

不得不在循环外声明RND对象。谢谢tinstaafl!

相关问题