"Animer" un label avec un timer...

Signaler
Messages postés
82
Date d'inscription
jeudi 26 décembre 2013
Statut
Membre
Dernière intervention
14 juin 2016
-
Messages postés
378
Date d'inscription
samedi 22 septembre 2012
Statut
Membre
Dernière intervention
13 août 2017
-
Bonjour, je suis coincé car j'aimerai avoir un label avec le texte animé suivant :

Etape 1 : "Veuillez patienter."
Etape 2 : "Veuillez patienter.."
Etape 3 : "Veuillez patienter..."
Etape 4 : "Veuillez patienter."
Etape......... (et ainsi de suite)

J'ai quelques idées de code, par exemple :

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click

        animated.Visible = True 'animated est le label que je veux animer
        Timer1.Start()
        CheckUpdates() 'CheckUpdates() est une fonction qui prend du temps à s'exécuter donc c'est pour cela que je suis ici et que je veux animer un label. C'est pour montrer au futur utilisateur qu'il n'y a pas de bug mais que c'est en train de travailler, si vous voyez ce que je veux dire...
        Form2.Show() 'une form que je veux montrer à la fin

    End Sub

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

        animated.Text = animated.Text + "."

        If animated.Text = "Veuillez patienter..." Then
            animated.Text = "Veuillez patienter."
        End If

    End Sub


et ça, c'est dans le code de la Form2 que je veux afficher :

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Form1.animated.Visible = False
        Form1.Timer1.Stop()

    End Sub


Merci d'avance pour votre réponse...!

PS: N'hésitez pas à me dire si vous ne comprenez pas à quoi je veux en venir... Même si je pense avoir été assez clair... :)
A voir également:

7 réponses

Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Bonjour
Cela ne fonctionne pas comme tu veux
L'évenement tick du timer est exécuté à la fin après le form2.show
ce n'est pas parce qu'on écrit timer1.start que le code du timer1_tick est exécuté immédiatement

utilise un backgroundworker
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
montre ton code
Messages postés
82
Date d'inscription
jeudi 26 décembre 2013
Statut
Membre
Dernière intervention
14 juin 2016

Le voici, j'ai changé quelques choses mais pas de résultat... Et, je ne mets pas tout, histoire de ne pas remplir la page de choses "inutiles" dis-moi si tu veux que je les mette quand même (ça n'a rien à voir ou presque avec le reste)

Dans la Form1 :

Imports System.Net
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
        Form2.Show()
        Form2.Timer1.Start()
        Form2.animated.Visible = True
    End Sub
	
    Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        Dim MAJ As New WebClient
        Dim DernièreVersion As String = MAJ.DownloadString("https://dl.dropboxusercontent.com/s/pwaph79vw8v8sfx/Version.txt")
        invisible.Text = DernièreVersion
    End Sub

    Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
        If VersionActuelle = invisible.Text Then
            Form2.MAJexist.Text = "Aucune mise à jour disponible"
            Form2.ok.Visible = True
        Else
            Form2.MAJexist.Text = "Une mise à jour est disponible"
            Form2.download.Visible = True
            Form2.cancel.Visible = True
        End If
    End Sub
	
End Class


Et dans la Form2 :

Imports System.Net
Public Class Form8

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        animated.Text = animated.Text + "."
        If animated.Text = "Veuillez patienter...." Then
            animated.Text = "Veuillez patienter."
        End If
    End Sub
	
    Private Sub ok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ok.Click
        Me.Hide()
    End Sub
	
    Private Sub cancel_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cancel.Click
        Me.Hide()
    End Sub
	
    Private Sub download_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles download.Click
        Dim MAJDownload As New WebClient
        Dim DownloadLink As String = MAJDownload.DownloadString("https://dl.dropboxusercontent.com/s/s0uj4t9wcittto5/Download.txt")
        Process.Start(DownloadLink)
    End Sub
	
End Class


Merci !
Messages postés
7259
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
11 février 2021
119
Bonjour,

ShayW, ne te rappelles-tu pas de cela tu avais mis un commentaire :-)

http://codes-sources.commentcamarche.net/source/53734-amusons-nous-avec-un-label

Bonne journée
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Bonjour

Ah si maintenenant
il va falloir que je commence à apprendre mes messages postés :-)
Messages postés
82
Date d'inscription
jeudi 26 décembre 2013
Statut
Membre
Dernière intervention
14 juin 2016

Merci ! Mais j'ai encore un problème, j'ai utilisé le backgroundworker mais mon logiciel ne veut pas s'actualiser, il reste sur mon label animé et ne veux plus afficher l'autre form
Messages postés
7259
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
11 février 2021
119
Essaie ceci

#Region "Thread"
'pour lancer le thread
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdcreer.Click
BackgroundWorker1.RunWorkerAsync()
End Sub
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Dim MyThread As BackgroundWorker = CType(sender, BackgroundWorker) 'récupération du thread d'arrière plan
Dim pourcent As Integer
MyThread.ReportProgress(pourcent) 'pourcent est un Integer indiquant l'état d'avancement.
'Ajoute l'opération a effectuée ton code
End Sub
Private Sub BackgroundWorker1_ProgressChanged( _
ByVal sender As Object, _
ByVal e As ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
Timer1.Start() ' déplacement du texte dans le label
animated.Text = " Veuillez patienter....... " 'label défilant
End Sub
'Quand le code d'arrière plan est terminé la procédure RunWorkerCompleted est exécutée.
Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, _
ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
' ici, elle affiche un message indiquant que le thread d'arrière plan est terminé.
' MessageBox.Show("Opération réussie. ", " Mon Titre", MessageBoxButtons.OK, MessageBoxIcon.Information)
animated.Text = " Opération réussie..... " 'label défilant
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrlabel.Tick
' déplacement du texte dans le label
animated.Text = Mid(animated.Text, 2, animated.Text.Length - 1) & Mid(animated.Text, 1, 1)
End Sub
#End Region

Messages postés
7259
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
11 février 2021
119
J'ai oublié

Timer1.Stop à mettre quand c'est terminé dans

BackgroundWorker1_RunWorkerCompleted
Messages postés
82
Date d'inscription
jeudi 26 décembre 2013
Statut
Membre
Dernière intervention
14 juin 2016

Merci je vais essayer... :)
Messages postés
82
Date d'inscription
jeudi 26 décembre 2013
Statut
Membre
Dernière intervention
14 juin 2016

Excuse moi, mais ça ne marche pas :'( A chaque fois, l'UI freeze... Bon bah tant pis...
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
tu as écrit
CheckUpdates() 'CheckUpdates() est une fonction qui prend du temps à s'exécuter donc c'est pour cela que je suis ici et que je veux animer un label. C'est pour montrer au futur utilisateur qu'il n'y a pas de bug mais que c'est en train de travailler, si vous voyez ce que je veux dire...

et je ne vois pas la fonction dans le code

Private WithEvents backgroundWorker1 As New System.ComponentModel.BackgroundWorker

Private Sub backgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles backgroundWorker1.DoWork

CheckUpdates()

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdcreer.Click
timer1.start()
timer1.interval = 1
BackgroundWorker1.RunWorkerAsync()
End Sub

Private Sub Time1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick

if label1.visible = true then
label1.visble = false
elseif label1.visible = false then
label1.visible = true
end if
directcast(sender,timer).interval = 800

end sub

Private Sub backgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles backgroundWorker1.RunWorkerCompleted
timer1.stop()
End Sub
Messages postés
378
Date d'inscription
samedi 22 septembre 2012
Statut
Membre
Dernière intervention
13 août 2017
14
Bonjour Drarig29.

Une proposition :

Public Class Accueil
Private Pas As Double = 1000, Nbr As Integer = 10, n As Integer = 1

Private Sub Mar_Click(sender As System.Object, e As System.EventArgs) Handles Mar.Click
Démarrer()
End Sub

Private Sub Arr_Click(sender As Object, e As System.EventArgs) Handles Arr.Click
Arrêter()
End Sub

Public Sub Démarrer()
Tps.Start()
n = 1
End Sub

Public Sub Arrêter()
Tps.Stop()
Masquer()
End Sub

Private Sub Afficher()
Affichage.Show()
Affichage.Aff.Text = "Veuillez patienter" & Cars(".", n)
End Sub

Private Sub Masquer()
Affichage.Close()
End Sub

Private Sub Tps_Tick(sender As Object, e As System.EventArgs) Handles Tps.Tick
Afficher()
If n = Nbr Then n = 1 Else n += 1
End Sub

Private Function Cars(ByVal c As String, n As Integer) As String
Dim Cr As New String(System.Convert.ToChar(c), n)
Cars = Cr
End Function

End Class



Public Class Affichage

End Class

Cordialement