"Animer" un label avec un timer...

Utilisateur anonyme - 29 mars 2014 à 20:58
Zermelo Messages postés 378 Date d'inscription samedi 22 septembre 2012 Statut Membre Dernière intervention 13 août 2017 - 30 mars 2014 à 15:06
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... :)

7 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
29 mars 2014 à 21:30
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
1
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
29 mars 2014 à 23:24
montre ton code
1
Utilisateur anonyme
30 mars 2014 à 10:48
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 !
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
30 mars 2014 à 09:15
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
1
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
30 mars 2014 à 12:44
Bonjour

Ah si maintenenant
il va falloir que je commence à apprendre mes messages postés :-)
0
Utilisateur anonyme
29 mars 2014 à 22:06
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
30 mars 2014 à 11:35
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

0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
30 mars 2014 à 11:39
J'ai oublié

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

BackgroundWorker1_RunWorkerCompleted
0
Utilisateur anonyme
30 mars 2014 à 12:19
Merci je vais essayer... :)
0
Utilisateur anonyme
30 mars 2014 à 12:43
Excuse moi, mais ça ne marche pas :'( A chaque fois, l'UI freeze... Bon bah tant pis...
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
Modifié par cs_ShayW le 30/03/2014 à 13:23
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
0
Zermelo Messages postés 378 Date d'inscription samedi 22 septembre 2012 Statut Membre Dernière intervention 13 août 2017 14
30 mars 2014 à 15:06
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
0
Rejoignez-nous