Effet visuel avec évenement MouseEnter

Résolu
tuyn00txa Messages postés 27 Date d'inscription samedi 8 janvier 2011 Statut Membre Dernière intervention 12 juin 2011 - 20 nov. 2010 à 15:25
NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 - 26 nov. 2010 à 23:04
Bonjour, je cherche à effectuer un effet visuel, de sorte que lorsque l'on passe avec la souris sur le contrôle, l'icône s'agrandit progressivement.
Voici ce que j'ai fais, le timer marche bien mais on ne voit que la dernière taille de l'icône.

  Private Sub PictureBox(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.MouseEnter
        PictureBox1.Size = New Size(45, 45)
        Threading.Thread.Sleep(500)
        PictureBox1.Size = New Size(50, 50)
        Threading.Thread.Sleep(500)
        PictureBox1.Size = New Size(79, 79)
    End Sub

11 réponses

NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 158
20 nov. 2010 à 15:54
Bonjour,

  Private Sub PictureBox(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.MouseEnter
        PictureBox1.Size = New Size(45, 45)
application.DoEvents
        Threading.Thread.Sleep(500)
        PictureBox1.Size = New Size(50, 50)
application.DoEvents
        Threading.Thread.Sleep(500)
        PictureBox1.Size = New Size(79, 79)
    End Sub


Mon site
3
NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 158
21 nov. 2010 à 13:45
Bonjour,

En effet, ça peut poser problème.
Ce que tu peux faire :
-soit conserver la même technique qu'actuellement, mais mémoriser dans une variable si tu est entré dans icone_survol (MaVar=True) et si tu es entré dans icone_seloigner (MaVar=False)
ensuite, dans icone_survol, si MaVar=False, tu sors avec un Exit Sub.

- Sinon, plus propre, utiliser un Timer et faire un contrôle héritant de la PictureBox.

Mon site
3
tuyn00txa Messages postés 27 Date d'inscription samedi 8 janvier 2011 Statut Membre Dernière intervention 12 juin 2011
20 nov. 2010 à 15:59
Merci beaucoup Henry pour ta réponse rapide, en effet ça marche super
0
NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 158
20 nov. 2010 à 17:09
Merci, de rien :)

Dans ce cas, marque la réponse qui t'a aidée en tant que "réponse acceptée" pour faciliter les recherches des autres membres :)
0

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

Posez votre question
tuyn00txa Messages postés 27 Date d'inscription samedi 8 janvier 2011 Statut Membre Dernière intervention 12 juin 2011
21 nov. 2010 à 02:50
Il y a juste un soucis au niveau des deux évènements que j'ai crée, en faite j'ai rajouté un évènement qui intervient lorsqu'on quitte la position de l'icône. Mais voila, il suffit de passer sur l'icône rapidement à la souris pour que l'icône ne se rétrécisse pas... Je crois que c'est au niveau des "Thread.sleep" mais je suis pas sur.

Voici le code : (j'ai un peu abusé sur les valeurs des sleep mais c'était pour voir ce qu'il se passait)

Private Sub icone_survol(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.MouseEnter
        PictureBox1.Size = New Size(45, 45)
        Application.DoEvents()
        Threading.Thread.Sleep(1000)
        PictureBox1.Size = New Size(50, 50)
        Application.DoEvents()
        Threading.Thread.Sleep(1000)
        PictureBox1.Size = New Size(55, 55)
    End Sub

Private Sub icone_seloigner(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.MouseLeave
        Application.DoEvents()
        PictureBox1.Size = New Size(40, 40)
End Sub



Je vous remercie pour votre aide.
0
tuyn00txa Messages postés 27 Date d'inscription samedi 8 janvier 2011 Statut Membre Dernière intervention 12 juin 2011
21 nov. 2010 à 15:09
Ayant plusieurs icônes, je pense que la deuxième solution me soit plus adapté. Pourrais tu la détaillé stp ? merci
0
NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 158
21 nov. 2010 à 15:25
Bonjour,

Il faut créer une nouvelle classe :

Il y a la méthode qui consiste à) créer un contrôle utilisateur hérité, mais je ne suis pas arrivé à l'utiliser pour le moment, si tu y arrive, il faut hériter de PictureBox

Sinon en passant par le code :

Friend Class CtlPrictureBox 'Ctl est mon préfixe pour les controles utilisateurs
Inherits PictureBox

'Ensuite, à toi de remplir

Private Sub Me_MouseEnter(...) Handles me.MouseEnter
...
End Sub

Private Sub Me_MouseLeave(...) Handles me.MouseLeave
...
End Sub

End class


Je te laisse un peu chercher :)

Mon site
0
tuyn00txa Messages postés 27 Date d'inscription samedi 8 janvier 2011 Statut Membre Dernière intervention 12 juin 2011
21 nov. 2010 à 22:59
    Friend Class CtlPrictureBox1 'Ctl est mon préfixe pour les controles utilisateurs
        Inherits PictureBox

        Private Sub icone_survol(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.MouseEnter
            PictureBox1.Size = New Size(45, 45)
            Application.DoEvents()
            Threading.Thread.Sleep(1000)
            PictureBox1.Size = New Size(50, 50)
            Application.DoEvents()
            Threading.Thread.Sleep(1000)
            PictureBox1.Size = New Size(55, 55)
        End Sub

        Private Sub icone_seloigner(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.MouseLeave
            Application.DoEvents()
            PictureBox1.Size = New Size(40, 40)
        End Sub

    End Class


"Une référence à un membre non partagé requiert une référence d'objet." (à propos de PictureBox1)
0
NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 158
21 nov. 2010 à 23:13
Bonjour,

In ne faut pas faire
PictureBox1
mais
Me

Car le contrôle à modifier est déjà la même instance qui est en cours :)

Sinon, pour ton problème de passage rapide de la souris, il faut faire la méthode que j'avais signalée en tant que première solution.

A la place de tes PictureBox, pour tes icônes, mets le contrôle créé.

Mon site
0
tuyn00txa Messages postés 27 Date d'inscription samedi 8 janvier 2011 Statut Membre Dernière intervention 12 juin 2011
21 nov. 2010 à 23:34
Merci encore Henry pour ton aide, mais ça marche pas avec ce code (ni agrandissement ni rétrécissement), saurais-tu pourquoi

j'ai bien remplacé les "picturebox1" par des "me" comme tu m'as dis.

        Private Sub icone_survol(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.MouseEnter
            Me.Size = New Size(45, 45)
            Application.DoEvents()
            Threading.Thread.Sleep(1000)
            Me.Size = New Size(50, 50)
            Application.DoEvents()
            Threading.Thread.Sleep(1000)
            Me.Size = New Size(55, 55)
        End Sub

        Private Sub icone_seloigner(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.MouseLeave
            Application.DoEvents()
            Me.Size = New Size(40, 40)
        End Sub

    End Class


Si je comprends bien, ce code sert uniquement pour gérer plusieurs "picturebox" de la même façon, non?
0
NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 158
26 nov. 2010 à 23:04
0