IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[VB.NET]Procédure qui s'éxécute plusieurs fois


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Par défaut [VB.NET]Procédure qui s'éxécute plusieurs fois
    Bonjour à tous,

    J'ai un problème que je n'arrive pas à résoudre:

    J'ai créé une procédure "doubleclick" sur une picturebox, dont le but est de changer l'image (on passe d'un pion blanc à un pion noir, et inversemement).

    Or, quand je doucle-clique sur cette picturebox, il arrive (pas à chaque fois!!) qu'il éxécute plusieurs fois les commandes (il change le pion noir en blanc, puis en noir, puis en blanc, etc.)

    Après avoir essayé de débuger, il est clair que parfois la procédure est appelée plusieurs fois. Comment est-ce possible que sur un seul double-click la procédure soit appelée plus d'une fois? Y a t'il un moyen d'éviter ça?

    Merci d'avance!

    Un programmeur en déprime..

  2. #2
    Membre éprouvé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 336
    Par défaut
    salut, on peut voir ton code?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Par défaut Code (jeu programmé = Othello)
    Voilà ma procédure "double-click": tout marche (calcul des pions à convertir, changement de couleur, etc.)
    A la fin de la procédure, la procédure de changement de joueur est appelée, qui marche elle aussi.

    Sauf qu'après avoir changé les pions de couleurs (boucle While) et changé de joueur (procédure change_joueur()), parfois il rerentre ds PictureBox_DoubleClick(), et comme il a changé de joueur auparavant, il rechange la couleur des pions, et ce 2, 3, 4 fois ou plus. Du coup, un seul double-click peut ne pas changer la couleur au final.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
        Private Sub PictureBox_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim element As Object
            Dim elementbis, elementter As Control
            Dim dif, pas, saut, ecart, toto As Integer
            Dim compteur As Integer = 0
            Dim fin As Boolean = False
     
            'On calcule la différence d'index entre le pion choisi et la case où il est laché
            dif = sender.tabindex - depart
     
            'On calcule le pas (valeur absolue)
            If dif < 8 And dif > -8 Then
                pas = 1
            ElseIf dif Mod 9 = 0 Then
                pas = 9
            ElseIf dif Mod 10 = 0 Then
                pas = 10
            Else
                pas = 11
            End If
            'On remet le pas en valeur réelle
            If dif < 0 Then
                pas = 0 - pas
            End If
            'On calcule le nombre de pions sautés
            saut = (dif / pas) - 1
            'On convertit les pions sautés et le pion de destination de la couleur de celui qui a joué
            ecart = pas
     
    	'Boucle qui change les pions de couleur
            While compteur <= saut
                For Each element In Controls
                    If element.TabIndex = depart + ecart Then
                        'on change le statut de la case
                        If tour = "n" Then
                            element.image = Image.FromFile("pionnoir.gif")
                            element.tag = "n"
                        ElseIf tour = "b" Then
                            element.image = Image.FromFile("pionblanc.gif")
                            element.tag = "b"
                        End If
                    End If
                Next element
                compteur = compteur + 1
                ecart = ecart + pas
            End While
     
    		'On change de joueur
            change_joueur()
     
        End Sub
     
     
    	'PROCEDURE DE CHANGEMENT DE JOUEUR
        Private Sub change_joueur()
            Dim elementter As Control
     
            'On change de joueur
            If tour = "n" Then
                tour = "b"
                Label37.Text = " Player : " & player2
            ElseIf tour = "b" Then
                tour = "n"
                Label37.Text = " Player : " & player1
            End If
     
            'On branche les pions du joueur qui doit jouer sur la procédure qui autorise le click
            For Each elementter In Controls
                If elementter.Tag = tour Then
                    AddHandler elementter.Click, AddressOf PictureBox_Click
                Else
                    RemoveHandler elementter.Click, AddressOf PictureBox_Click
                End If
            Next elementter
        End Sub
    Merci beaucoup!

  4. #4
    Membre éclairé Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Par défaut
    (End While, ça marche ? Ça devrait être Wend normalement ^^)

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Par défaut While
    Si ça fonctionne en vb.net, j'ai oublié de préciser...

  6. #6
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Par défaut
    Oui, le code est bien dans la procédure double click, c'est ça qui est etonnant, je ne comprends pas du tout. Normalement quand on double clicque, la procédure ne se lance qu'une fois, et là c'est pas le cas..

  7. #7
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 33
    Par défaut
    Est-ce que tu t'es assuré que c'est bien dans l'évenement double click que tu as ton code et non dans l'évenement click ?

Discussions similaires

  1. [XL-2007] Procédure qui s'éxécute une seconde fois à partir de la moitié
    Par stepel dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 24/08/2014, 22h26
  2. Réponses: 8
    Dernier message: 17/05/2009, 22h30
  3. Formulaire qui se submit plusieurs fois
    Par otterley dans le forum Struts 1
    Réponses: 12
    Dernier message: 08/02/2008, 16h49
  4. Réponses: 2
    Dernier message: 23/07/2007, 06h14
  5. code qui s'execute plusieurs fois
    Par khelif dans le forum JBuilder
    Réponses: 1
    Dernier message: 10/03/2005, 21h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo