有没有办法在多个程序中使用计时器滴答?

时间:2016-11-24 14:29:51

标签: vb.net timer

我目前正在编写一个小动画。动画以一个小圆圈在屏幕上移动开始,然后用户点击按钮和其他小图像在屏幕上移动(我觉得描述图像的内容,程序的目的等等将是相切的和不相关的)。

我目前编码动画的方式是这样的:

Private Sub Timer_Tick(sender As Object, e As EventArgs) Handles Timer.Tick
    Circle1.Left -= 10
    If Counter = 16 Then
        Timer.Enabled = False
        Counter = 0
    End If
    Counter += 1
End Sub

然而,问题是我需要使用计时器来帮助动画多个图像的移动。除了创建多个计时器之外,还有一种方法可以在多个子程序中使用计时器滴答作用吗?

1 个答案:

答案 0 :(得分:0)

您可以使用列表来保存要设置动画的所有控件。迭代计时器事件中的列表并修改控件的位置。这是一个如何做的例子。

Public Class Form1

    ' this list holds all controls to animate
    Private controlsToAnimate As New List(Of Control)

    Private random As New Random

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick

        ' this list holds all controls to remove
        Dim controlsToRemove As New List(Of Control)

        For i = 0 To controlsToAnimate.Count - 1
            Dim control = controlsToAnimate(i)
            If control.Left < 0 Then
                ' this control has reached the left edge, so put it in the list to remove
                controlsToRemove.Add(control)
            Else
                ' move the control to left
                control.Left -= 10
            End If
        Next

        ' remove all controls that have reached the left edge
        For Each control In controlsToRemove
            controlsToAnimate.Remove(control)
            control.Dispose()
        Next

        ' for debug only, display the number of controls to animate
        Me.Text = controlsToAnimate.Count()

    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        ' create a new picturebox
        Dim newControl As New PictureBox
        With newControl
            ' load an image for the picturebox
            .Image = Image.FromFile("D:\Pictures\abc.jpg")

            ' size of the picturebox
            .Size = New Size(100, 100)

            ' picturebox appears at the right edge of the form,
            ' the vertical position is randomize
            .Location = New Point(Me.Width - newControl.Width, random.Next(Me.Height - newControl.Height))

            ' stretch the image to fit the picturebox
            .SizeMode = PictureBoxSizeMode.StretchImage
        End With

        ' add the newly created control to list of controls to animate
        controlsToAnimate.Add(newControl)

        '  add the newly created control to the form
        Me.Controls.Add(newControl)

    End Sub

End Class