【问题标题】:vb generate random number for Form locationvb为表单位置生成随机数
【发布时间】:2016-12-08 12:59:23
【问题描述】:

我正在 Visual Studio 中制作一个 Visual Basic 程序,其中会显示相当多的表单。但是,它们全部一起弹出,并且只有其中一些是可见的。我想知道是否有办法在两个数字之间生成一个随机整数,然后将其设置为New Form1 的位置。 现在我有这个:

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 
        Dim more As New Form1
        (Code for generating random number from 1 to 999)
        (Code for generating new random number from 1 to 999)
        more.Location = New Point(random number, new random number)
        more.Show()
        time = 10
End Sub

【问题讨论】:

  • 使用Random 类。网上很多例子。如果您只是在网上搜索“vb.net 生成随机数”,那么您就会找到它们。你不应该在没有先搜索网络的情况下在这里发布问题。我们是来提供帮助的,但提供的是困难的东西,而不是你可以在 30 秒内通过搜索找到的东西。
  • 对不起,我是 StackOverflow 的新手。问题是,我通常会搜索它并从该站点获得答案,但我没有找到与我的问题完全相符的答案,所以我决定直接问它。不过感谢您的建议!

标签: vb.net random integer location


【解决方案1】:

这样会容易一些

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles Timer1.Tick
    Dim more As New Form1
    Dim rn As New Random
    more.Location = New Point(rn.Next(0, 999), rn.Next(0, 999))
    more.Show()
    time = 10
End Sub

这是可以使用所有屏幕空间的代码

Dim rn As New Random
Dim mxw As Integer = My.Computer.Screen.Bounds.Width - Me.Width
Dim mxh As Integer = My.Computer.Screen.Bounds.Height - (Me.Height + 29 + 38)
Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles Timer1.Tick
    Dim more As New Form1
    more.Show()
    more.Location = New Point(rn.Next(0, mxw), rn.Next(0, mxh))
    time = 10
End Sub

好吧,我不太明白你所说的 new 随机数是什么意思,所以如果这不能解决你的问题,请更好地解释它。

【讨论】:

  • 我的意思是我想生成一个随机数,将其设置为 x,然后创建一个新的(不同的)随机数,并将其设置为 y。不过我会测试你的答案,因为我认为它可能会起作用。
  • 在每个计时器滴答声上?
  • 完整的是,当计时器滴答作响时,倒计时开始,当TextBox1.Text中的数字为0时,它将执行New Form1的随机位置的代码,并且将倒计时设置回 10。
  • 其实没什么。我只是在解释,因为你说你不明白我为什么说New 随机数。我只需要测试一下。
  • 无论如何。如果有效,请将其标记为答案。顺便说一句,最大数量为 999,您无法使用所有屏幕空间。如果你想全部使用我可以给你代码:)
【解决方案2】:

所以你应该可以使用它。基本上,它允许您设置上限和下限,然后将其设置为 x 和 y 坐标。我特别没有声明 x 和 y 变量。

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 
        Dim more As New Form1
        Dim upperLimit As Integer
        Dim lowerLimit As Integer
        lowerLimit = 1
        upperLimit = 999
        x = Int ((upperLimit - lowerLimit + 1) * Rnd + lowerLimit)
        y = Int ((upperLimit - lowerLimit + 1) * Rnd + lowerLimit)
        more.Location = New Point(x, y)
        more.Show()
        time = 10
End Sub

【讨论】:

  • 你真的不应该在 VB.NET 中使用Rnd。我们不再使用 VB6 Toto。
  • 当我读到这个问题时,我发誓我以为它说的是 MS Access on not vb.net,但显然我是个傻瓜!同意随机课。
猜你喜欢
  • 2013-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 2014-03-19
相关资源
最近更新 更多