我正在尝试创建一个简单的可视化示例,第一步是在屏幕上移动一列框(面板)。到目前为止,我已经完成了这一点,但我也试图让每个面板在移动时单独闪烁几次。效果应该是一种“循环”循环,其中第一个面板闪烁几次,然后是第二个,然后是第三个,等等,并重复。
我对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循环嵌套在滴答计时器内,所以对于每个滴答,它都会通过循环完全。
我对一些非常简单的逻辑感到有些困惑,但请耐心等待我,因为我是新手。
感谢您的帮助!
答案 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