1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| Public Class FormAnimation
Public Shared Sub ShowAnimation(f As Form)
f.Opacity = 0
AddHandler f.Shown, AddressOf FormShown
f.Show()
End Sub
Public Shared Function ShowDialogAnimation(f As Form) As DialogResult
f.Opacity = 0
AddHandler f.Shown, AddressOf FormShown
Return f.ShowDialog
End Function
Private Shared Sub FormShown(sender As Object, e As System.EventArgs)
' sender contient le déclencheur, ici le form
Dim f As Form = DirectCast(sender, Form)
Dim t As New System.Windows.Forms.Timer ' on créé un timer qui va géré l'animation
t.Interval = 80 ' en ms
t.Tag = f ' pour lier un form à un timer, et donc retrouver le form en fonction du timer (.tag sert à mettre tout et n'importe quoi)
AddHandler t.Tick, AddressOf OpacityIncrement ' on s'abonne à l'event tick du timer
t.Start()
RemoveHandler f.Shown, AddressOf FormShown ' on se désabonne à l'event, il faut toujours se désabonner des events auxquels on s'est abonné quand on en a plus besoin
End Sub
Private Shared Sub OpacityIncrement(sender As Object, e As System.EventArgs)
' sender contient le déclencheur, ici le timer
Dim t As Timer = DirectCast(sender, Timer)
Dim form = DirectCast(t.Tag, Form)
If form.Opacity >= 1 Then ' condition d'arrêt et de sortie
t.Stop() ' arrêt du timer
RemoveHandler t.Tick, AddressOf OpacityIncrement ' retirer l'abonnement à l'event
t.Dispose() ' destruction de l'objet en mémoire
Exit Sub
End If
form.Opacity += 0.1 'incrément
End Sub
End Class |
Partager