[VB.NET] Evènement _Click se fait en boucle infinie

Résolu/Fermé
Orbital38 Messages postés 68 Date d'inscription dimanche 4 janvier 2015 Statut Membre Dernière intervention 31 octobre 2020 - Modifié par Orbital38 le 15/08/2015 à 13:31
Orbital38 Messages postés 68 Date d'inscription dimanche 4 janvier 2015 Statut Membre Dernière intervention 31 octobre 2020 - 15 août 2015 à 13:42
Bonjour,

J'avais évoqué ce problème sur un sujet plus général mais je préfère en ouvrir un autre qui ne porte que là-dessus (avec un titre plus précis).

Actuellement j'ai une Form où je veux créer des boutons par code VBA.
Pour cela j'utilise le module de la Form et un module de classe.

Les évènements MouseEnter et MouseLeave sur mes boutons fonctionnent très bien (je change la BackgroundImage du bouton). Cependant l'évènement _Click (ou _MouseClick, _MouseUp, _MouseDown) ne fonctionne pas. Enfin si il fonctionne, mais même avec un simple MsgBox celui-ci apparait en boucle (que je le valide par OK ou que je le ferme). Ce problème doit sûrement venir d'une mauvaise définition des contrôles de ma part (ou de la collection que j'utilise ?).

Voici les bouts de code que je pense important :
Dans mon module de Form :
Public Class Outils
    Public Collect As Collection

[...]

    Private Sub Outils_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove
        Dim test3000 As Classe1
        Collect = New Collection
        For Each Ctrl As System.Windows.Forms.Button In Me.Controls.OfType(Of Button).Where(Function(button) button.Name Like "Bouton100*")
            test3000 = New Classe1
            test3000.noraj = Ctrl
            Collect.Add(test3000)
        Next Ctrl
    End Sub

[...]

End Class

Dans mon module de classe :
Public Class Classe1

    Public WithEvents noraj As System.Windows.Forms.Button

    Private Sub noraj_MouseEnter(sender As Object, e As EventArgs) Handles noraj.MouseEnter
        Call Outils.test_couleur_bouton2(noraj)
    End Sub

    Private Sub noraj_MouseLeave(sender As Object, e As EventArgs) Handles noraj.MouseLeave
        Call Outils.test_couleur_bouton1(noraj)
    End Sub

    Private Sub noraj_Click(sender As Object, e As EventArgs) Handles noraj.Click
        'Call Outils.analyse_tag(noraj.Tag.ToString)
        MessageBox.Show("test", "ici titre MsgBox")
    End Sub

End Class


Lors de la répétition en boucle, la valeur de noraj ne bouge pas, il s'agit à chaque fois du bouton sur lequel j'ai appuyé. C'est comme si à chaque validation ou annulation de la MsgBox il détecte un Click sur le bouton.

Si je change une image par exemple, le changement se fait mais je garde la main sur la souris, du coup je peux appeler un autre évènement (comme MouseLeave) et arrêter le _Click.

Si j'appelle une macro qui elle appelle aussi une messagebox, j'ai de nouveau le problème.

Si je mets un j = j+1 (j=1 au tout début de la classe) et que je fais du pas à pas (et que je n'appelle pas d'autre évènement), la procédure _Click se fait en boucle et j retombe à 1 à chaque début de procédure.

Merci d'avance à celui qui trouve le problème.

1 réponse

Orbital38 Messages postés 68 Date d'inscription dimanche 4 janvier 2015 Statut Membre Dernière intervention 31 octobre 2020
Modifié par Orbital38 le 15/08/2015 à 13:43
Ok je suis juste trop débile.

La recherche de mes boutons et la création de ma collection je dois mettre ça dans le Load et pas le MouseMove, désolé pour le sujet inutile...
0