Effet visuel avec évenement MouseEnter [Résolu]

Messages postés
27
Date d'inscription
samedi 8 janvier 2011
Statut
Membre
Dernière intervention
12 juin 2011
- - Dernière réponse : NHenry
Messages postés
14600
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 décembre 2019
- 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
Afficher la suite 

11 réponses

Meilleure réponse
Messages postés
14600
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 décembre 2019
137
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de NHenry
Messages postés
14600
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 décembre 2019
137
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de NHenry
Messages postés
27
Date d'inscription
samedi 8 janvier 2011
Statut
Membre
Dernière intervention
12 juin 2011
0
Merci
Merci beaucoup Henry pour ta réponse rapide, en effet ça marche super
Commenter la réponse de tuyn00txa
Messages postés
14600
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 décembre 2019
137
0
Merci
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 :)
Commenter la réponse de NHenry
Messages postés
27
Date d'inscription
samedi 8 janvier 2011
Statut
Membre
Dernière intervention
12 juin 2011
0
Merci
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.
Commenter la réponse de tuyn00txa
Messages postés
27
Date d'inscription
samedi 8 janvier 2011
Statut
Membre
Dernière intervention
12 juin 2011
0
Merci
Ayant plusieurs icônes, je pense que la deuxième solution me soit plus adapté. Pourrais tu la détaillé stp ? merci
Commenter la réponse de tuyn00txa
Messages postés
14600
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 décembre 2019
137
0
Merci
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
Commenter la réponse de NHenry
Messages postés
27
Date d'inscription
samedi 8 janvier 2011
Statut
Membre
Dernière intervention
12 juin 2011
0
Merci
    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)
Commenter la réponse de tuyn00txa
Messages postés
14600
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 décembre 2019
137
0
Merci
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
Commenter la réponse de NHenry
Messages postés
27
Date d'inscription
samedi 8 janvier 2011
Statut
Membre
Dernière intervention
12 juin 2011
0
Merci
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?
Commenter la réponse de tuyn00txa
Messages postés
14600
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 décembre 2019
137
Commenter la réponse de NHenry