Plusieurs icones associées à un évenement ?

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
14599
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
8 décembre 2019
- 26 nov. 2010 à 23:04
Bonjour, je voudrais associer plusieurs icônes (PictureBox1, PictureBox2, PictureBox3) mais pas TOUS, à 2 évenements, comment faire ça?

Merci pour votre aide


Voici mon code

 Private Sub icone_survol(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.MouseEnter
        verif1 = False
        verif2 = True
        PictureBox1.Size = New Size(42, 42)
        PictureBox1.Location = New Point(PictureBox1.Location.X - 1, PictureBox1.Location.Y - 1)
        Application.DoEvents()
        Threading.Thread.Sleep(50)
        PictureBox1.Size = New Size(44, 44)
        PictureBox1.Location = New Point(PictureBox1.Location.X - 1, PictureBox1.Location.Y - 1)
        Application.DoEvents()
        Threading.Thread.Sleep(50)
        PictureBox1.Size = New Size(46, 46)
        PictureBox1.Location = New Point(PictureBox1.Location.X - 1, PictureBox1.Location.Y - 1)
        If verif1 True Then PictureBox1.Size New Size(40, 40)
        If verif2 False And verif1 True Then PictureBox1.Location = New Point(PictureBox1.Location.X - 3, PictureBox1.Location.Y - 3)
    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)
        PictureBox1.Location = New Point(PictureBox1.Location.X + 3, PictureBox1.Location.Y + 3)
        verif1 = True
        verif2 = True
    End Sub
Afficher la suite 

5 réponses

Messages postés
2811
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
19
0
Merci
Salut,

Private Sub icone_survol([...]) Handles PictureBox1.MouseEnter, PictureBox2.MouseEnter, PictureBox3.MouseEnter

Sachant que l'objet sender représente le contrôle qui déclanche l'événement, donc :

        Dim pBox As PictureBox = DirectCast(sender, PictureBox)
        verif1 = False
        verif2 = True
        pBox.Size = New Size(42, 42)
        pBox.Location = New Point(pBox.Location.X - 1, pBox.Location.Y - 1)
        Application.DoEvents()
        Threading.Thread.Sleep(50)
        pBox.Size = New Size(44, 44)
        pBox.Location = New Point(pBox.Location.X - 1, pBox.Location.Y - 1)
        Application.DoEvents()
        Threading.Thread.Sleep(50)
        pBox.Size = New Size(46, 46)
        pBox.Location = New Point(pBox.Location.X - 1, pBox.Location.Y - 1)
        If verif1 True Then pBox.Size New Size(40, 40)
        If verif2 False And verif1 True Then pBox.Location = New Point(pBox.Location.X - 3, pBox.Location.Y - 3)


Je suppose...

Par contre, j'ai une question: Ou est la logique de ton code ? verif1 et verif2 sont des variables de test que tu as oublié de retirer ? Car si ce n'est le cas, leur valeur ne changeront jamais d'elles même, ce qui implique que ces morceaux de code ne servent à rien.

++

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Commenter la réponse de Mayzz
Messages postés
27
Date d'inscription
samedi 8 janvier 2011
Statut
Membre
Dernière intervention
12 juin 2011
0
Merci
Merci Mayzz pour ta solution, ça marche .

En faite j'ai crée les variables verif1 et verif2 pour éviter des bugs.
Verif1 et verif2 changent de valeur si on passe rapidement la souris sur l'icône, car à ce moment là (presque instantanée), les 2 évenements s'enclenchent, du coup si icone_survol s'execute alors qu'on a retiré la souris de l'icône, la taille de l'icone restera grande...


D'ailleurs, j'ai un petit bug qui me dit lorsque je passe la souris rapidement et plusieurs fois sur une icône : "Une exception non gérée du type 'System.StackOverflowException' s'est produite dans System.Windows.Forms.dll" pour cette ligne là :
 pBox.Location = New Point(pBox.Location.X - 1, pBox.Location.Y - 1)

Il est bien évident que ce bug se produirait très rarement... mais je veux vraiment le résoudre.

Pourrait tu m'aider à le résoudre si je t'envoi mon projet sur visual basic 2010 express?
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
Ou plutôt une question peut être plus simple, soit 2 évènements X et Y associé chacun à une fonction (sub), comment faire en sorte que, si les 2 évenements sont actives, la première fonction associé à l'évenement X s'effectue et dès que la fonction se termine, la fonction associé à l'évenement Y commence ? (jamais les 2 évenements ensemble)

J'éspère que je me suis fait comprendre
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
personne pour m'aider ?
Commenter la réponse de tuyn00txa
Messages postés
14599
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
8 décembre 2019
137
0
Merci
Bonjour,

Pour ta gestion, tu peux faire plus simple avec un Timer :

Sub Timer(...) Handles ...
    Select Case mEtape
        Case -1
            PictureBox1.Size = New Size(40, 40)
        Case 0 'Pas de survol
            'Ne rien faire
        Case 1
            PictureBox1.Size = New Size(44, 44)
            mEtape+=1
        Case 2
            ....
        Case 3
            ....
        Case 4
            mEtape=0
    End select
End Sub


Et pour Le survol et le retrait :
Sub MouseEnter(...) Handles Me.MouseEnter
    mEtape=1
End sub

Sub MouseLeave(...) Handles Me.MouseLeave
    mEtape=-1
End sub


Ensuite, il faudra gérer le passage à l'étape 0 si on est pas encore à l'étape 4, mais ça devrait être dans tes co(r)des :)

Mon site
Commenter la réponse de NHenry