Effet visuel avec évenement MouseEnter [Résolu]

Signaler
Messages postés
27
Date d'inscription
samedi 8 janvier 2011
Statut
Membre
Dernière intervention
12 juin 2011
-
Messages postés
14723
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
17 septembre 2020
-
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

Messages postés
14723
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
17 septembre 2020
144
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
Messages postés
14723
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
17 septembre 2020
144
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
Messages postés
27
Date d'inscription
samedi 8 janvier 2011
Statut
Membre
Dernière intervention
12 juin 2011

Merci beaucoup Henry pour ta réponse rapide, en effet ça marche super
Messages postés
14723
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
17 septembre 2020
144
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 :)
Messages postés
27
Date d'inscription
samedi 8 janvier 2011
Statut
Membre
Dernière intervention
12 juin 2011

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.
Messages postés
27
Date d'inscription
samedi 8 janvier 2011
Statut
Membre
Dernière intervention
12 juin 2011

Ayant plusieurs icônes, je pense que la deuxième solution me soit plus adapté. Pourrais tu la détaillé stp ? merci
Messages postés
14723
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
17 septembre 2020
144
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
Messages postés
27
Date d'inscription
samedi 8 janvier 2011
Statut
Membre
Dernière intervention
12 juin 2011

    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)
Messages postés
14723
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
17 septembre 2020
144
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
Messages postés
27
Date d'inscription
samedi 8 janvier 2011
Statut
Membre
Dernière intervention
12 juin 2011

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?
Messages postés
14723
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
17 septembre 2020
144