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

VB.NET Discussion :

Problème boucle Do Until Action Loop [Débutant]


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Animateur Club Informatique
    Inscrit en
    Mai 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Animateur Club Informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2013
    Messages : 4
    Par défaut Problème boucle Do Until Action Loop
    Bonjour,

    Le programme sert à créer une animation par déplacement de "Labels".
    A priori aucune difficulté sauf que le programme ne fonctionne que si j'insère une instruction MessageBox dans la boucle ce qui oblige à valider le message pour chaque tour de boucle, mais cela marche très bien !

    PS : ci-dessous le code, je n'ai pas trouvé la commande spécifique pour celui-ci

    Merci d'avance pour votre aide
    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
     
    Public Class Form1
        Dim Ant, Bar As Boolean
        ' Boucle indique le nombre de sauts de déplacement des Labels
        Dim Boucle, Incrément As Integer
        ' Phase indique la phase de chaque déplacement de Label
        Dim Phase As String
     
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            'Initialisation de Ant et Bar au chargement de la fenêtre Form1
            Ant = False
            Bar = False
            Incrément = 10
        End Sub
     
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            ' Bouton "Quitter"
            'Label23.Location = New Point(110, 160)
            Close()
        End Sub
     
        Sub Button2_MouseDown() Handles Button2.MouseDown
            ' Bouton "?" actionné, il efface le Logo et fait apparaître le texte de Label1
            PictureBox1.Visible = False
            Label1.Visible = True
        End Sub
     
        Sub Button2_MouseUp() Handles Button2.MouseUp
            ' Bouton "?" relâché, il efface le texte de Label1 et fait apparaître le Logo
            Label1.Visible = False
            PictureBox1.Visible = True
        End Sub
     
        Private Sub Timer1_Tick() Handles Timer1.Tick
            Select Case Phase
                Case "AD1"
                    If Boucle < 401 Then
                        ' +3 permet d'accélérer le déplacement
                        ' Car Interval = 1 est encore trop lent
                        ' Et sans Timer c'est trop rapide
                        Boucle = Boucle + 10
                        Label23.Location = New Point(Boucle, 160)
                    Else
                        Timer1.Enabled = False
                        Phase = "AI1"
                    End If
                Case "AI1"
                    If Boucle < 601 Then
                        Boucle = Boucle + Incrément
                        Label24.Location = New Point(Boucle, 190)
                    Else
                        Timer1.Enabled = False
                        Phase = "AI2"
                    End If
                Case "AI2"
                    If Boucle > 160 Then
                        Boucle = Boucle - Incrément
                        Label24.Location = New Point(600, Boucle)
                    Else
                        Timer1.Enabled = False
                        Phase = "AM1"
                    End If
                Case "AM1"
                    If Boucle < 780 Then
                        Boucle = Boucle + Incrément
                        Label25.Location = New Point(Boucle, 220)
                    Else
                        Timer1.Enabled = False
                        Phase = "AM2"
                    End If
                Case "AM2"
                    If Boucle > 160 Then
                        Boucle = Boucle - Incrément
                        Label25.Location = New Point(780, Boucle)
                    Else
                        Timer1.Enabled = False
                        Phase = "AV1"
                    End If
                Case "AV1"
                    If Boucle < 960 Then
                        Boucle = Boucle + Incrément
                        Label26.Location = New Point(Boucle, 250)
                    Else
                        Timer1.Enabled = False
                        Phase = "AV2"
                    End If
                Case "AV2"
                    If Boucle > 160 Then
                        Boucle = Boucle - Incrément
                        Label26.Location = New Point(960, Boucle)
                    Else
                        Timer1.Enabled = False
                        Phase = "Fin"
                    End If
            End Select
        End Sub
     
        Sub Bibliothèque_Antoine()
            ' MessageBox.Show(Phase)
            ' AD1 pour Antoine Document 1er mouvement
            Select Case Phase
                Case "AD1"
                    Label23.Visible = True
                    Timer1.Enabled = True
                    Boucle = 110
                Case "AI1"
                    Label24.Visible = True
                    Timer1.Enabled = True
                    Boucle = 110
                Case "AI2"
                    Timer1.Enabled = True
                    Boucle = 190
                Case "AM1"
                    Label25.Visible = True
                    Timer1.Enabled = True
                    Boucle = 110
                Case "AM2"
                    Timer1.Enabled = True
                    Boucle = 220
                Case "AV1"
                    Label26.Visible = True
                    Timer1.Enabled = True
                    Boucle = 110
                Case "AV2"
                    Timer1.Enabled = True
                    Boucle = 250
            End Select
        End Sub
     
        Private Sub Button7_Click(sender As System.Object, e As System.EventArgs) Handles Button7.Click
            ' Bouton Antoine
            Ant = True
            Bar = False
            ' Activation Couleurs Antoine
            Label4.BackColor = Color.Orange
            Label5.BackColor = Color.Gold
            Label6.BackColor = Color.Gold
            Label7.BackColor = Color.Gold
            Label8.BackColor = Color.Gold
            ' Désactivation Couleurs Barbara
            Label9.BackColor = Color.DarkGray
            Label10.BackColor = Color.LightGray
            Label11.BackColor = Color.LightGray
            Label12.BackColor = Color.LightGray
            Label13.BackColor = Color.LightGray
            ' Activation Couleurs Public
            Label14.BackColor = Color.DarkTurquoise
            Label15.BackColor = Color.PaleTurquoise
            Label16.BackColor = Color.PaleTurquoise
            Label17.BackColor = Color.PaleTurquoise
            Label18.BackColor = Color.PaleTurquoise
        End Sub
     
        Private Sub Button6_Click(sender As System.Object, e As System.EventArgs) Handles Button6.Click
            ' Bouton Barbara
            Bar = True
            Ant = False
            ' Désactivation Couleurs Antoine
            Label4.BackColor = Color.DarkGray
            Label5.BackColor = Color.LightGray
            Label6.BackColor = Color.LightGray
            Label7.BackColor = Color.LightGray
            Label8.BackColor = Color.LightGray
            ' Activation Couleurs Barbara
            Label9.BackColor = Color.Magenta
            Label10.BackColor = Color.Violet
            Label11.BackColor = Color.Violet
            Label12.BackColor = Color.Violet
            Label13.BackColor = Color.Violet
            ' Activation Couleurs Public
            Label14.BackColor = Color.DarkTurquoise
            Label15.BackColor = Color.PaleTurquoise
            Label16.BackColor = Color.PaleTurquoise
            Label17.BackColor = Color.PaleTurquoise
            Label18.BackColor = Color.PaleTurquoise
        End Sub
     
        Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
            ' Bouton RAZ
            Ant = False
            Bar = False
            ' Désactivation Couleurs Antoine
            Label4.BackColor = Color.DarkGray
            Label5.BackColor = Color.LightGray
            Label6.BackColor = Color.LightGray
            Label7.BackColor = Color.LightGray
            Label8.BackColor = Color.LightGray
            ' Désactivation Couleurs Barbara
            Label9.BackColor = Color.DarkGray
            Label10.BackColor = Color.LightGray
            Label11.BackColor = Color.LightGray
            Label12.BackColor = Color.LightGray
            Label13.BackColor = Color.LightGray
            ' Désactivation Couleurs Public
            Label14.BackColor = Color.DarkGray
            Label15.BackColor = Color.LightGray
            Label16.BackColor = Color.LightGray
            Label17.BackColor = Color.LightGray
            Label18.BackColor = Color.LightGray
            ' RAZ Label23, 24, 25 et 26
            Label23.Location = New Point(110, 160)
            Label23.Visible = False
            Label24.Location = New Point(110, 190)
            Label24.Visible = False
            Label25.Location = New Point(110, 220)
            Label25.Visible = False
            Label26.Location = New Point(110, 250)
            Label26.Visible = False
            ' RAZ Bibliothèques
            Label19.BackColor = Color.DarkGray
            Label20.BackColor = Color.DarkGray
            Label21.BackColor = Color.DarkGray
            Label22.BackColor = Color.DarkGray
            ' AffBib = False
        End Sub
     
        Public Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click
            ' Affichage Bibliothèques
            ' Si Antoine est sélectionné
            Label19.BackColor = Color.DarkOrange
            Label20.BackColor = Color.DarkOrange
            Label21.BackColor = Color.DarkOrange
            Label22.BackColor = Color.DarkOrange
            If Ant = True Then
                Phase = "AD1"
                Do Until Phase = "Fin"
                    MessageBox.Show(Phase)
                    Bibliothèque_Antoine()
                Loop
            End If
        End Sub
     
     
    End Class

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 206
    Par défaut
    Utilise les balises CODE pour rendre ton code plus lisible, le bouton # dans l'editeur.

    Edit : Et pour ton problème est tu sur que tu atteins la phase "Fin" ?
    A la fin de tes Case il est conseillé de mettre un exit select

  3. #3
    Membre à l'essai
    Homme Profil pro
    Animateur Club Informatique
    Inscrit en
    Mai 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Animateur Club Informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2013
    Messages : 4
    Par défaut Do Until ne fonctionne qu'avec un MessageBox dans la boucle
    Merci à Chaparo pour ce début d'aide.

    Cette fois le code est bien édité avec le bouton # dans le message.

    L'éditeur de VB 2010 Express termine les instructions Select (avec Case) par "End select" : Faut-il les remplacer par "Exit select" ?

    Si l'instruction MessageBox est dans la boucle, le programme fonctionne (avec les interruptions des messagebox).

    En ne mettant pas l'instruction MessageBox dans la boucle, le programme plante dès l'action sur le Bouton "Aff. Biblio", je dois l'arrêter par le gestionnaire des tâches de Windows7 !

    Merci à ceux qui ont des idées à me proposer

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 206
    Par défaut
    Ca veut surement dire que quelque chose est utilisé avant d'avoir été initialisé.
    Le temps ecoulé a l'aide du message box permet de le faire,
    à la place d'un message box met un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.writeLine("my output")
    tu peux aussi entourer ton code d'un Try Catch pour voir ce qui est levé

    Edit Une fois encore j'ai pas lu la phrase interessante,
    Si tu dois arreter ton programme par le gestionnaire il y a 95% de chance que tu sois parti dans une boucle infini donc une fois que tu est bloqué mais ton programme en pause et pars en pas a pas pour voir ce qui plante

  5. #5
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Sinon tu as le Case Else pour ton Select qui fait que si Phase ne correspond à aucun de tes Case, il finira son test dans le Case Else.

    Egalement, pourquoi Do Until au lieu de While ?

    Si ton appli freeze je pense que tu pars en boucle infini car tu n'atteins jamais le Phase = "Fin"

    Creuse un peu pour voir pourquoi tu ne l'atteins jamais, je te dirais bien de le faire en pas à pas, mais avec les Timers en parallèle je sais pas ce que ça va donner ...

    EDIT: Grillé par Chaparo

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,

    a mon avis, c'est juste un problème de conception.

    La boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Do Until ...
    ...
                Loop
    monopolise le processeur, ne rend pas la main au système et empêche les évènements timer d'être traités. Le MessageBox force l'interruption de la boucle et le système en profite pour prendre le main et effectuer un évènement Timer.

    Donc tout doit se passer dans les évènements Timer, sans utiliser de boucle infinie.
    Du genre (attention un des label.visible n'était pas au bon endroit)
    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
    76
    77
    78
    79
    80
        Private Sub Timer1_Tick() Handles Timer1.Tick
            If Not Ant Then
                Phase = "AD1"
                Exit Sub
            End If
            Select Case Phase
                Case "AD1"
                    If Boucle < 401 Then
                        Boucle = Boucle + 10
                        Label23.Location = New Point(Boucle, 160)
                    Else
                        Phase = "AI1"
                        Label24.Visible = True
                        Boucle = 110
                    End If
                Case "AI1"
                    If Boucle < 601 Then
                        Boucle = Boucle + Incrément
                        Label24.Location = New Point(Boucle, 190)
                    Else
                        Phase = "AI2"
                        Boucle = 190
                    End If
                Case "AI2"
                    If Boucle > 160 Then
                        Boucle = Boucle - Incrément
                        Label24.Location = New Point(600, Boucle)
                    Else
                        Phase = "AM1"
                        Label25.Visible = True
                        Boucle = 110
                    End If
                Case "AM1"
                    If Boucle < 780 Then
                        Boucle = Boucle + Incrément
                        Label25.Location = New Point(Boucle, 220)
                    Else
                        Phase = "AM2"
                        Boucle = 220
                    End If
                Case "AM2"
                    If Boucle > 160 Then
                        Boucle = Boucle - Incrément
                        Label25.Location = New Point(780, Boucle)
                    Else
                        Phase = "AV1"
                        Label26.Visible = True
                        Boucle = 110
                    End If
                Case "AV1"
                    If Boucle < 960 Then
                        Boucle = Boucle + Incrément
                        Label26.Location = New Point(Boucle, 250)
                    Else
                        Phase = "AV2"
                        Boucle = 250
                    End If
                Case "AV2"
                    If Boucle > 160 Then
                        Boucle = Boucle - Incrément
                        Label26.Location = New Point(960, Boucle)
                    Else
                        Phase = "Fin"
                    End If
            End Select
        End Sub
     
        Public Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
            ' Affichage Bibliothèques
            ' Si Antoine est sélectionné
            Label19.BackColor = Color.DarkOrange
            Label20.BackColor = Color.DarkOrange
            Label21.BackColor = Color.DarkOrange
            Label22.BackColor = Color.DarkOrange
            If Ant Then
                Phase = "AD1"
                Label23.Visible = True
                Timer1.Enabled = True
            End If
        End Sub
    A finir d'adapter avec les autres boutons de Barbara et raz.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Animateur Club Informatique
    Inscrit en
    Mai 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Animateur Club Informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2013
    Messages : 4
    Par défaut Boucle Do Until etc.
    Chers amis,

    Après avoir essayé les propositions qui étaient à mon niveau de compétence, j'ai pensé qu'effectivement il y avait un problème de conception entrainant un défaut d'initialisation ou une boucle infinie etc.

    J'ai donc simplifié la structure de mon programme (cf. ci-dessous) pour arriver au même résultat, à savoir que les Timers ne fonctionnent pas.
    Par exemple, le Timer2 (à la fin du programme) ne ralentit pas du tout la dernière Boucle Do While, alors qu'en mettant un MessageBox dedans, ces derniers s'affichent bien ... et que la décrémentation s'effectue bien également.

    Cela viendrait-il de mon VB 2010 Express ou de mon Micro (portable Toshiba IntelCore Duo 4 Go Ram Windows7 Premium) ?

    Désolé de prendre sur votre temps même si vous le faites de bon coeur.

    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
     
     
    Public Class Form1
        Dim Ant, Bar As Boolean
        ' Boucle indique le nombre de sauts de déplacement des Labels
        Dim Abs, Ord, Incrément As Integer
        ' Phase indique la phase de chaque déplacement de Label
        Dim Phase As String
     
        Public Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            'Initialisation de Ant et Bar au chargement de la fenêtre Form1
            Ant = False
            Bar = False
            Incrément = 1
            ' Phase = "AD1"
        End Sub
     
        Public Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            ' Bouton "Quitter"
            'Label23.Location = New Point(110, 160)
            Close()
        End Sub
     
        Public Sub Button2_MouseDown() Handles Button2.MouseDown
            ' Bouton "?" actionné, il efface le Logo et fait apparaître le texte de Label1
            PictureBox1.Visible = False
            Label1.Visible = True
        End Sub
     
        Public Sub Button2_MouseUp() Handles Button2.MouseUp
            ' Bouton "?" relâché, il efface le texte de Label1 et fait apparaître le Logo
            Label1.Visible = False
            PictureBox1.Visible = True
        End Sub
     
        Public Sub Timer1_Tick() Handles Timer1.Tick
            Abs = Abs + Incrément
        End Sub
     
        Public Sub Timer2_Tick() Handles Timer2.Tick
            Ord = Ord - Incrément
        End Sub
     
     
        Public Sub Button7_Click(sender As System.Object, e As System.EventArgs) Handles Button7.Click
            ' Bouton Antoine
            Ant = True
            Bar = False
            ' Activation Couleurs Antoine
            Label4.BackColor = Color.Orange
            Label5.BackColor = Color.Gold
            Label6.BackColor = Color.Gold
            Label7.BackColor = Color.Gold
            Label8.BackColor = Color.Gold
            ' Désactivation Couleurs Barbara
            Label9.BackColor = Color.DarkGray
            Label10.BackColor = Color.LightGray
            Label11.BackColor = Color.LightGray
            Label12.BackColor = Color.LightGray
            Label13.BackColor = Color.LightGray
            ' Activation Couleurs Public
            Label14.BackColor = Color.DarkTurquoise
            Label15.BackColor = Color.PaleTurquoise
            Label16.BackColor = Color.PaleTurquoise
            Label17.BackColor = Color.PaleTurquoise
            Label18.BackColor = Color.PaleTurquoise
        End Sub
     
        Public Sub Button6_Click(sender As System.Object, e As System.EventArgs) Handles Button6.Click
            ' Bouton Barbara
            Bar = True
            Ant = False
            ' Désactivation Couleurs Antoine
            Label4.BackColor = Color.DarkGray
            Label5.BackColor = Color.LightGray
            Label6.BackColor = Color.LightGray
            Label7.BackColor = Color.LightGray
            Label8.BackColor = Color.LightGray
            ' Activation Couleurs Barbara
            Label9.BackColor = Color.Magenta
            Label10.BackColor = Color.Violet
            Label11.BackColor = Color.Violet
            Label12.BackColor = Color.Violet
            Label13.BackColor = Color.Violet
            ' Activation Couleurs Public
            Label14.BackColor = Color.DarkTurquoise
            Label15.BackColor = Color.PaleTurquoise
            Label16.BackColor = Color.PaleTurquoise
            Label17.BackColor = Color.PaleTurquoise
            Label18.BackColor = Color.PaleTurquoise
        End Sub
     
        Public Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
            ' Bouton RAZ
            Ant = False
            Bar = False
            ' Désactivation Couleurs Antoine
            Label4.BackColor = Color.DarkGray
            Label5.BackColor = Color.LightGray
            Label6.BackColor = Color.LightGray
            Label7.BackColor = Color.LightGray
            Label8.BackColor = Color.LightGray
            ' Désactivation Couleurs Barbara
            Label9.BackColor = Color.DarkGray
            Label10.BackColor = Color.LightGray
            Label11.BackColor = Color.LightGray
            Label12.BackColor = Color.LightGray
            Label13.BackColor = Color.LightGray
            ' Désactivation Couleurs Public
            Label14.BackColor = Color.DarkGray
            Label15.BackColor = Color.LightGray
            Label16.BackColor = Color.LightGray
            Label17.BackColor = Color.LightGray
            Label18.BackColor = Color.LightGray
            ' RAZ Label23, 24, 25 et 26
            Label23.Location = New Point(110, 160)
            Label23.Visible = False
            Label24.Location = New Point(110, 190)
            Label24.Visible = False
            Label25.Location = New Point(110, 220)
            Label25.Visible = False
            Label26.Location = New Point(110, 250)
            Label26.Visible = False
            ' RAZ Bibliothèques
            Label19.BackColor = Color.DarkGray
            Label20.BackColor = Color.DarkGray
            Label21.BackColor = Color.DarkGray
            Label22.BackColor = Color.DarkGray
        End Sub
     
        Public Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click
            ' Affichage Bibliothèques
            Label19.BackColor = Color.DarkOrange
            Label20.BackColor = Color.DarkOrange
            Label21.BackColor = Color.DarkOrange
            Label22.BackColor = Color.DarkOrange
            ' Si Antoine est sélectionné
            If Ant = True Then
                ' Timer1.Enabled = True
                ' Phase = "AD1"
                Label23.Visible = True
                Abs = 110
                Do While Abs < 401
                    Label23.Location = New Point(Abs, 160)
                    ' Timer1_Tick()
                    Abs = Abs + Incrément
                Loop
                MessageBox.Show(Abs)
                ' Phase = "AI1"
                Label24.Visible = True
                Abs = 110
                Do While Abs < 601
                    Label24.Location = New Point(Abs, 190)
                    Abs = Abs + Incrément
                Loop
                MessageBox.Show(Abs)
                ' Phase = "AI2"
                Ord = 190
                Do While Ord > 160
                    Label24.Location = New Point(600, Ord)
                    Ord = Ord - Incrément
                Loop
                MessageBox.Show(Ord)
                ' Phase = "AM1"
                Label25.Visible = True
                Abs = 110
                Do While Abs < 781
                    Label25.Location = New Point(Abs, 220)
                    Abs = Abs + Incrément
                Loop
                MessageBox.Show(Abs)
                ' Phase = "AM2"
                Ord = 220
                Do While Ord > 160
                    Label25.Location = New Point(780, Ord)
                    Ord = Ord - Incrément
                Loop
                MessageBox.Show(Ord)
                ' Phase = "AV1"
                Label26.Visible = True
                Abs = 110
                Do While Abs < 961
                    Label26.Location = New Point(Abs, 250)
                    Abs = Abs + Incrément
                Loop
                MessageBox.Show(Abs)
                ' Phase = "AV2"
                Timer2.Enabled = True
                Timer2.Interval = 1000
                Ord = 250
                Do While Ord > 160
                    Label26.Location = New Point(960, Ord)
                    'Ord = Ord - Incrément
                    Timer2_Tick()
                Loop
                Timer2.Enabled = False
                MessageBox.Show(Ord)
            End If
        End Sub
     
     
    End Class

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Citation Envoyé par VBLB35 Voir le message
    ... une boucle infinie etc.

    J'ai donc simplifié la structure de mon programme (cf. ci-dessous) pour arriver au même résultat, à savoir que les Timers ne fonctionnent pas.
    Par exemple, le Timer2 (à la fin du programme) ne ralentit pas du tout la dernière Boucle Do While, alors qu'en mettant un MessageBox dedans, ces derniers s'affichent bien ... et que la décrémentation s'effectue bien également.
    Avez-vous lu mon Post ?

    Un timer n'est pas fait pour ralentir une boucle, il est fait pour se déclencher périodiquement et effectuer un traitement.

    Le code que je vous ai donné permet le déplacement horizontal puis vertical des labels les uns après les autres (par le timer) pour les placer sur une seule ligne.
    C'est à priori ce que vous souhaitiez.

    Je vous redonne le code complet (que j'ai adapté de votre premier Post) (la Sub Bibliothèque_Antoine() n'existe plus, la boucle Do Until ... loop non plus)
    Testez-le.
    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    Public Class Form1
     
        Dim Ant, Bar As Boolean
        ' Boucle indique le nombre de sauts de déplacement des Labels
        Dim Boucle, Incrément As Integer
        ' Phase indique la phase de chaque déplacement de Label
        Dim Phase As String
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Initialisation de Ant et Bar au chargement de la fenêtre Form1
            Ant = False
            Bar = False
            Incrément = 10
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            ' Bouton "Quitter"
            'Label23.Location = New Point(110, 160)
            Close()
        End Sub
     
        Sub Button2_MouseDown() Handles Button2.MouseDown
            ' Bouton "?" actionné, il efface le Logo et fait apparaître le texte de Label1
            PictureBox1.Visible = False
            Label1.Visible = True
        End Sub
     
        Sub Button2_MouseUp() Handles Button2.MouseUp
            ' Bouton "?" relâché, il efface le texte de Label1 et fait apparaître le Logo
            Label1.Visible = False
            PictureBox1.Visible = True
        End Sub
     
        Private Sub Timer1_Tick() Handles Timer1.Tick
            If Not Ant Then
                Phase = "AD1"
                Exit Sub
            End If
            lblEtat.Text = Phase & " " & Timer1.Enabled.ToString
            Select Case Phase
                Case "AD1"
                    If Boucle < 401 Then
                        Boucle = Boucle + 10
                        Label23.Location = New Point(Boucle, 160)
                    Else
                        Phase = "AI1"
                        Label24.Visible = True
                        Boucle = 110
                    End If
                Case "AI1"
                    If Boucle < 601 Then
                        Boucle = Boucle + Incrément
                        Label24.Location = New Point(Boucle, 190)
                    Else
                        Phase = "AI2"
                        Boucle = 190
                    End If
                Case "AI2"
                    If Boucle > 160 Then
                        Boucle = Boucle - Incrément
                        Label24.Location = New Point(600, Boucle)
                    Else
                        Phase = "AM1"
                        Label25.Visible = True
                        Boucle = 110
                    End If
                Case "AM1"
                    If Boucle < 780 Then
                        Boucle = Boucle + Incrément
                        Label25.Location = New Point(Boucle, 220)
                    Else
                        Phase = "AM2"
                        Boucle = 220
                    End If
                Case "AM2"
                    If Boucle > 160 Then
                        Boucle = Boucle - Incrément
                        Label25.Location = New Point(780, Boucle)
                    Else
                        Phase = "AV1"
                        Label26.Visible = True
                        Boucle = 110
                    End If
                Case "AV1"
                    If Boucle < 960 Then
                        Boucle = Boucle + Incrément
                        Label26.Location = New Point(Boucle, 250)
                    Else
                        Phase = "AV2"
                        Boucle = 250
                    End If
                Case "AV2"
                    If Boucle > 160 Then
                        Boucle = Boucle - Incrément
                        Label26.Location = New Point(960, Boucle)
                    Else
                        Phase = "Fin"
                    End If
            End Select
        End Sub
     
        Sub Bibliothèque_Antoine()
            ' MessageBox.Show(Phase)
            ' AD1 pour Antoine Document 1er mouvement
            Select Case Phase
                Case "AD1"
                    Label23.Visible = True
                    Timer1.Enabled = True
                    Boucle = 110
                Case "AI1"
                    Label24.Visible = True
                    Timer1.Enabled = True
                    Boucle = 110
                Case "AI2"
                    Timer1.Enabled = True
                    Boucle = 190
                Case "AM1"
                    Label25.Visible = True
                    Timer1.Enabled = True
                    Boucle = 110
                Case "AM2"
                    Timer1.Enabled = True
                    Boucle = 220
                Case "AV1"
                    Label26.Visible = True
                    Timer1.Enabled = True
                    Boucle = 110
                Case "AV2"
                    Timer1.Enabled = True
                    Boucle = 250
            End Select
        End Sub
     
        Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click, Button7.ClientSizeChanged
            ' Bouton Antoine
            Ant = True
            Bar = False
            ' Activation Couleurs Antoine
            Label4.BackColor = Color.Orange
            Label5.BackColor = Color.Gold
            Label6.BackColor = Color.Gold
            Label7.BackColor = Color.Gold
            Label8.BackColor = Color.Gold
            ' Désactivation Couleurs Barbara
            Label9.BackColor = Color.DarkGray
            Label10.BackColor = Color.LightGray
            Label11.BackColor = Color.LightGray
            Label12.BackColor = Color.LightGray
            Label13.BackColor = Color.LightGray
            ' Activation Couleurs Public
            Label14.BackColor = Color.DarkTurquoise
            Label15.BackColor = Color.PaleTurquoise
            Label16.BackColor = Color.PaleTurquoise
            Label17.BackColor = Color.PaleTurquoise
            Label18.BackColor = Color.PaleTurquoise
        End Sub
     
        Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click, Button6.ClientSizeChanged
            ' Bouton Barbara
            Bar = True
            Ant = False
            ' Désactivation Couleurs Antoine
            Label4.BackColor = Color.DarkGray
            Label5.BackColor = Color.LightGray
            Label6.BackColor = Color.LightGray
            Label7.BackColor = Color.LightGray
            Label8.BackColor = Color.LightGray
            ' Activation Couleurs Barbara
            Label9.BackColor = Color.Magenta
            Label10.BackColor = Color.Violet
            Label11.BackColor = Color.Violet
            Label12.BackColor = Color.Violet
            Label13.BackColor = Color.Violet
            ' Activation Couleurs Public
            Label14.BackColor = Color.DarkTurquoise
            Label15.BackColor = Color.PaleTurquoise
            Label16.BackColor = Color.PaleTurquoise
            Label17.BackColor = Color.PaleTurquoise
            Label18.BackColor = Color.PaleTurquoise
        End Sub
     
        Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            ' Bouton RAZ
            Ant = False
            Bar = False
            ' Désactivation Couleurs Antoine
            Label4.BackColor = Color.DarkGray
            Label5.BackColor = Color.LightGray
            Label6.BackColor = Color.LightGray
            Label7.BackColor = Color.LightGray
            Label8.BackColor = Color.LightGray
            ' Désactivation Couleurs Barbara
            Label9.BackColor = Color.DarkGray
            Label10.BackColor = Color.LightGray
            Label11.BackColor = Color.LightGray
            Label12.BackColor = Color.LightGray
            Label13.BackColor = Color.LightGray
            ' Désactivation Couleurs Public
            Label14.BackColor = Color.DarkGray
            Label15.BackColor = Color.LightGray
            Label16.BackColor = Color.LightGray
            Label17.BackColor = Color.LightGray
            Label18.BackColor = Color.LightGray
            ' RAZ Label23, 24, 25 et 26
            Label23.Location = New Point(110, 160)
            Label23.Visible = False
            Label24.Location = New Point(110, 190)
            Label24.Visible = False
            Label25.Location = New Point(110, 220)
            Label25.Visible = False
            Label26.Location = New Point(110, 250)
            Label26.Visible = False
            ' RAZ Bibliothèques
            Label19.BackColor = Color.DarkGray
            Label20.BackColor = Color.DarkGray
            Label21.BackColor = Color.DarkGray
            Label22.BackColor = Color.DarkGray
            ' AffBib = False
        End Sub
     
        Public Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
            ' Affichage Bibliothèques
            ' Si Antoine est sélectionné
            Label19.BackColor = Color.DarkOrange
            Label20.BackColor = Color.DarkOrange
            Label21.BackColor = Color.DarkOrange
            Label22.BackColor = Color.DarkOrange
            If Ant Then
                Phase = "AD1"
                Label23.Visible = True
                Timer1.Enabled = True
            End If
        End Sub
     
    End Class
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Animateur Club Informatique
    Inscrit en
    Mai 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Animateur Club Informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2013
    Messages : 4
    Par défaut Incompatibilité boucles avec timers
    Bonjour à tous,

    Effectivement, comme indiqué par rv6t, les timers semblent incompatibles avec les boucles : dans son cours Philippe Lasserre indique des problèmes dans certaines conditions que je ne pensais pas réunir vu la simplicité de mon programme.

    Il m'a donc fallu revoir la conception même du programme et mieux analyser la fonction des timers (encore merci à rv26t).

    J'ai séparé les différentes phases de déplacements en sub différentes, chacune appelant un timer et chacune appelant la suivante.

    Un grand merci à tous les contributeurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Public Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click
            ' Affichage Bibliothèques
            Label19.BackColor = Color.DarkOrange
            Label20.BackColor = Color.DarkOrange
            Label21.BackColor = Color.DarkOrange
            Label22.BackColor = Color.DarkOrange
            ' Si Antoine est sélectionné
            If Ant = True Then
                AD1()
            End If
            ' Si Barbara est sélectionnée ...
        End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub AD1()
            ' Phase AD1
            Label23.Visible = True
            Abs = 110
            Timer1.Interval = Interval
            Timer1.Enabled = True
        End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Public Sub Timer1_Tick() Handles Timer1.Tick
            ' Exécute AD1 (Antoine Documents Translation Horizontale)
            If Abs < 401 Then
                Abs = Abs + Incrément
                Label23.Location = New Point(Abs, 160)
            Else
                Timer1.Stop()
                AI1()
            End If
        End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boucle while until EOF et .csv : problème
    Par Karshick dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 01/10/2014, 17h49
  2. [XL-2007] Problème boucle Do / Loop While
    Par LULUCI dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/01/2013, 10h39
  3. Problème avec boucle for() et action POST
    Par Oli_Ifre dans le forum Langage
    Réponses: 4
    Dernier message: 26/04/2007, 09h52
  4. Problème boucle while et evenement
    Par tse_tilky_moje_imja dans le forum Général Python
    Réponses: 2
    Dernier message: 30/03/2006, 18h11
  5. [FLASH 8] Problème Boucle For
    Par Begood dans le forum Flash
    Réponses: 6
    Dernier message: 21/03/2006, 11h36

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