Vb.net 如何使picturebox闪烁

Vb.net 如何使picturebox闪烁,vb.net,timer,Vb.net,Timer,我正在下载一个文件,最后,我让一个picturebox闪烁了几下。 在闪烁结束时,picturebox应该隐藏自己。 我正在使用以下代码: ReadOnly timerblinking As New Windows.Forms.Timer dim blinking as integer Private Sub mClient_DownloadFileCompleted(sender As Object, e As AsyncCompletedEventArgs) Handles mclient.

我正在下载一个文件,最后,我让一个picturebox闪烁了几下。 在闪烁结束时,picturebox应该隐藏自己。 我正在使用以下代码:

ReadOnly timerblinking As New Windows.Forms.Timer
dim blinking as integer
Private Sub mClient_DownloadFileCompleted(sender As Object, e As AsyncCompletedEventArgs) Handles mclient.DownloadFileCompleted

       Label2.Text = "Downloaded"
       Label2.Refresh()
       blinking = 0
       timerblinking.Interval = 500                                                           
       timerlampeggio.Enabled = True                                                           
       AddHandler timerblinking.Tick, AddressOf Timer_tick

   End Sub
Private Sub Timer_tick(sender As Object, e As EventArgs)

      blinking += 1
       Rapid.PictureBox2.Visible = Not Rapid.PictureBox2.Visible
       If blinking= 5 Then                                                                                 '
           timerblinking.Stop()
           Rapid.PictureBox2.Visible = False
       End If
   End Sub
它第一次工作,但从第二次下载完成开始,它只显示picturebox而不闪烁..如果闪烁=5,我尝试将闪烁=0(显然是在停止计时器后),但它做了相同的事情。
我怎么能让它在第一次之后也眨眼呢?Thankas

在旁注中,如果将
只读更改为,则可以删除
AddHandler
语句,并切换到
Tick()
事件末尾的子句:

WithEvents timerblinking As New Windows.Forms.Timer

Private Sub timerblinking_Tick(sender As Object, e As EventArgs) Handles timerblinking.Tick

End Sub
Public Sub New()
    AddHandler Timer1.Tick, AddressOf Timer1_Tick
End Sub

这样,您就不会因为一个事件多次触发同一方法而遇到问题。

在每个按钮中。单击事件,您将向
计时器添加一个新的处理程序。勾选事件。
每次计时器重新启动时,所有事件处理程序都会在相同的时间间隔内调用,因此控件可见属性会同时设置为true/false多次

这当然有一个不太好的效果:它可能只是消失,或随机出现和消失,取决于定时器频率(间隔)

每次单击该按钮并重新启动计时器时,可以从勾号处理程序测试对输出窗格的写入:

Private Timer1 As System.Windows.Forms.Timer = New System.Windows.Forms.Timer

Private Sub someButton_Click(sender As Object, e As EventArgs) Handles someButton.Click
    AddHandler Timer1.Tick, AddressOf Timer1_Tick
    Timer1.Enabled = True
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs)
    Console.WriteLine("Timer Ticked")
    Timer1.Stop()
End Sub
您将在输出窗格中看到:

Timer Ticked

Timer Ticked
Timer Ticked

Timer Ticked
Timer Ticked
Timer Ticked
在表单构造函数(或
Form.Load
事件)中订阅一次
Tick
事件:

移除处理程序并在窗体关闭时处置计时器:

Private Sub SomeForm_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
    RemoveHandler Timer1.Tick, AddressOf Timer1_Tick
    Timer1.Dispose()
End Sub

谢谢那很有用!