嵌套计时器?多个同时计时器滴答的逻辑问题

时间:2014-03-14 16:56:45

标签: vb.net visual-studio timer

我正在尝试创建一个简单的可视化示例,第一步是在屏幕上移动一列框(面板)。到目前为止,我已经完成了这一点,但我也试图让每个面板在移动时单独闪烁几次。效果应该是一种“循环”循环,其中第一个面板闪烁几次,然后是第二个,然后是第三个,等等,并重复。

我对VB很陌生,到目前为止,我只能成功地使一个面板闪烁或所有面板闪烁,而不是每一个单独闪烁。到目前为止,这是我的代码:

Public Class Form1
    Public ticks As Integer
    Public p(4) As Panel

    Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load

        p(0) = Panel1
        p(1) = Panel2
        p(2) = Panel3
        p(3) = Panel4
        p(4) = Panel5

        ticks = 0
    End Sub

    Private Sub tmr1_Tick(sender As Object, e As System.EventArgs) Handles tmr1.Tick
        Dim i As Integer

        If ticks = 1 Then
            For i = 0 To 4
                Dim randomValue = Rnd()

                p(i).Top = 50 + 75 * i

                p(i).Left = randomValue * 120

            Next
        ElseIf ticks > 30 Then
            ticks = 0
        Else
            For i = 0 To 4
                p(i).Left += 20
            Next
        End If
        ticks += 1
    End Sub

    Private Sub tmr2_Tick(sender As System.Object, e As System.EventArgs) Handles tmr2.Tick
        Dim i As Integer

        For i = 0 To 4 'all of the panels blink at the same time..
            If p(i).Visible = False Then
                p(i).Visible = True
            ElseIf p(i).Visible = True Then
                p(i).Visible = False
            End If
        Next
    End Sub
End Class

截至目前,所有面板在随机位置移动屏幕时都会闪烁,我假设这是因为负责闪烁的for循环嵌套在滴答计时器内,所以对于每个滴答,它都会通过循环完全。

我对一些非常简单的逻辑感到有些困惑,但请耐心等待我,因为我是新手。

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

如果我明白你想要什么,这就行了。它们现在都闪烁,因为它们都在每个tick发生的循环中,这个例子通过它在数组中的索引改变每一个,index变量必须是类级别,以保持它在ticks之间的值。

Private index As Integer
Private Sub tmr2_Tick(sender As System.Object, e As System.EventArgs) Handles tmr2.Tick
    p(index).Visible = Not p(index).Visible
    If index = 4 Then
        index = 0 
    Else
        index += 1
    End If
End Sub