none
Code pour animation RRS feed

  • Question

  • Bonjour,

    Je suis novice, et j'aimerais pouvoir animé une image, c'est-à-dire que je veux que quand j'appui sur le button1 l'image descende jusqu'au milieu, a partir de la, la form2 s'ouvre, et l'image remonte d'un coup ( l'image est sur la form 1 )

    Merci d'avance

    dimanche 20 mars 2016 14:59

Réponses

  • Pour faire l'animation, simplement changez la position avec un incrément:

    le code:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim LIncrementAnimation As Integer = 5
    
            'Test sur la position
            While (PictureBox1.Top + PictureBox1.Height / 2) < (Me.Height / 2)
                PictureBox1.Top += LIncrementAnimation
                'On pause le Thread de l'UI pendant 100ms
                Thread.Sleep(100)
            End While
            'Ici l'UI reprend et la suite de l'application peut être écrite.... lancement de form etc
        End Sub

    dimanche 20 mars 2016 16:29
  • Bonjour,

    Ca fonctionne sauf que quand votre animation s'exécute, l'appli ne fait que ça (bloquage du main Thread).

    Votre application est-elle une application Windows Form ou WPF ?

    Si c'est une appli WPF, vous pouvez utiliser les Storyboard.

    Pour une appli Windows Form, il faudrait reprendre l'exemple ci-dessus en l'exécutant dans un autre thread et refaire une syncro avec le thread de l'UI pour modifier la position de l'image. Dans l'exemple, si vous essayez de déplacer la fenêtre pendant l'animation, vous verrez que vous n'y arriverez pas :P. Donc une autre solution :

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Task.Factory.StartNew(
                Sub()
                    While (PictureBox1.Top + PictureBox1.Height/2) < (Me.Height/2)
                        Dim yPos = PictureBox1.Top
                        yPos += 5
                        Me.Invoke(Sub()
                            PictureBox1.Top = yPos
                                     End Sub)
                        Thread.Sleep(100)
                    End While
                End Sub)
        End Sub


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    lundi 21 mars 2016 07:53

Toutes les réponses

  • Pour faire l'animation, simplement changez la position avec un incrément:

    le code:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim LIncrementAnimation As Integer = 5
    
            'Test sur la position
            While (PictureBox1.Top + PictureBox1.Height / 2) < (Me.Height / 2)
                PictureBox1.Top += LIncrementAnimation
                'On pause le Thread de l'UI pendant 100ms
                Thread.Sleep(100)
            End While
            'Ici l'UI reprend et la suite de l'application peut être écrite.... lancement de form etc
        End Sub

    dimanche 20 mars 2016 16:29
  • Bonjour,

    Ca fonctionne sauf que quand votre animation s'exécute, l'appli ne fait que ça (bloquage du main Thread).

    Votre application est-elle une application Windows Form ou WPF ?

    Si c'est une appli WPF, vous pouvez utiliser les Storyboard.

    Pour une appli Windows Form, il faudrait reprendre l'exemple ci-dessus en l'exécutant dans un autre thread et refaire une syncro avec le thread de l'UI pour modifier la position de l'image. Dans l'exemple, si vous essayez de déplacer la fenêtre pendant l'animation, vous verrez que vous n'y arriverez pas :P. Donc une autre solution :

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Task.Factory.StartNew(
                Sub()
                    While (PictureBox1.Top + PictureBox1.Height/2) < (Me.Height/2)
                        Dim yPos = PictureBox1.Top
                        yPos += 5
                        Me.Invoke(Sub()
                            PictureBox1.Top = yPos
                                     End Sub)
                        Thread.Sleep(100)
                    End While
                End Sub)
        End Sub


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    lundi 21 mars 2016 07:53