Plusieurs icones associées à un évenement ?

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 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

5 réponses

Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
28
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.
Messages postés
27
Date d'inscription
samedi 8 janvier 2011
Statut
Membre
Dernière intervention
12 juin 2011

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

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

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