Créer Boucle for qui next a chaque click d'un bouton

Messages postés
4
Date d'inscription
mercredi 16 septembre 2015
Dernière intervention
14 juillet 2016
- 14 juil. 2016 à 00:54 - Dernière réponse :
Messages postés
12269
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
20 novembre 2018
- 14 juil. 2016 à 13:11
Bonjour,
Je suis présentement en train de coder un petit programme qui affiche un total de 10 images aléatoirement. Chaque image est affiché une fois. J'aimerais pouvoir faire en sorte que lorsque un autre bouton continuer est appuyé, ma boucle "for i = 0 to 9 " fait une pause jusqu'à ce que le bouton continuer soit appuyé, ce qui lui ferait un "next". Le bouton devra etre appuyé 10 fois afin d'afficher l'ensemble des images. Voici mon code.

Public Class frmChoix
    Dim Random As Integer
    Dim n(9) As Boolean
    Dim i As Integer = 0

    Private Sub btnMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMenu.Click
        frmMenu.Show()
        Me.Hide()
    End Sub

    Sub btnAccepter_Click(sender As Object, e As EventArgs) Handles btnAccepter.Click

        For lCnt As Integer = 0 To n.Length - 1
            n(lCnt) = False
        Next lCnt


        Randomize()
        For i = 0 To 9
Start:
            Random = (Rnd() * 9) + 1


            If Not n(Random - 1) Then

                If Random = 1 Then
                    PictureBox1.Image = My.Resources.bergerallemand1
                    n(Random - 1) = True

                ElseIf Random = 2 Then
                    PictureBox1.Image = My.Resources.bergerallemand2
                    n(Random - 1) = True

                ElseIf Random = 3 Then
                    PictureBox1.Image = My.Resources.dingo1
                    n(Random - 1) = True

                ElseIf Random = 4 Then
                    PictureBox1.Image = My.Resources.dingo2
                    n(Random - 1) = True

                ElseIf Random = 5 Then
                    PictureBox1.Image = My.Resources.husky1
                    n(Random - 1) = True

                ElseIf Random = 6 Then
                    PictureBox1.Image = My.Resources.husky2
                    n(Random - 1) = True

                ElseIf Random = 7 Then
                    PictureBox1.Image = My.Resources.wolf1
                    n(Random - 1) = True

                ElseIf Random = 8 Then
                    PictureBox1.Image = My.Resources.loup2
                    n(Random - 1) = True

                ElseIf Random = 9 Then
                    PictureBox1.Image = My.Resources.fox1
                    n(Random - 1) = True

                ElseIf Random = 10 Then
                    PictureBox1.Image = My.Resources.renard2
                    n(Random - 1) = True
                End If
            Else
                GoTo Start
            End If
        Next

    End Sub

End Class
Afficher la suite 

Votre réponse

6 réponses

Messages postés
219
Date d'inscription
mercredi 26 octobre 2011
Dernière intervention
22 juin 2017
14 juil. 2016 à 09:01
0
Merci
Bonjour,

pour moi il y a deux problèmes dans ton code.

1. les labels sont déconseillés depuis le début du vb (même vb6)
et compliquent ta logique.

2. ton random (si tu n'as vraiment pas de chance) pourrait tu faire boucler longtemps pour obtenir tous les élements placés.

Pour moi tu dois te servir de l'evenement Click uniquement pour changer d'image et préparer une liste d'images à afficher.

voici un exemple que j'ai écris, il y a moyen de l'améliorer mais bon. si tu as des questions n'hésites pas.

Public Class Form1

    Dim listImg As List(Of Integer)         'liste qui contiendra l'ordre des images a afficher
    Dim currentImg As Integer = 0

    Private Sub initList()
        listImg = New List(Of Integer)
        Dim listPossible As New List(Of Integer)    'les images possible au départ
        For index = 0 To 9
            listPossible.Add(index)
        Next

        Dim Random As Integer
        Randomize()

        For i = 9 To 1 Step -1
            Random = Rnd() * i                  'on choisi parmi les i images restant dispo   
            listImg.Add(listPossible(Random))   'on ajoute celle choisie 
            listPossible.RemoveAt(Random)       'on la retire de la liste disponible
        Next
        listImg.Add(listPossible(0))       'après 9 iteration il n'en reste qu'une donc plus de random et on ajoute la derniere
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If currentImg < 0 Or currentImg > 9 Then
            Exit Sub
        End If
        Select Case listImg(currentImg)
            Case Is = 0
                PictureBox1.Image = My.Resources.bergerallemand1
            Case Is = 1
                PictureBox1.Image = My.Resources.bergerallemand2
            Case Is = 2
                PictureBox1.Image = My.Resources.dingo1
            Case Is = 3
                PictureBox1.Image = My.Resources.dingo2
            Case Is = 4
                PictureBox1.Image = My.Resources.husky1
            Case Is = 5
                PictureBox1.Image = My.Resources.husky2
            Case Is = 6
                PictureBox1.Image = My.Resources.wolf1
            Case Is = 7
                PictureBox1.Image = My.Resources.loup2
            Case Is = 8
                PictureBox1.Image = My.Resources.fox1
            Case Is = 9
                PictureBox1.Image = My.Resources.renard2
        End Select
        currentImg = currentImg + 1
    End Sub

    Public Sub New()

        ' Cet appel est requis par le concepteur.
        InitializeComponent()

        ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
        initList()  'on initialise l'ordre
    End Sub
End Class


bonne journée
Messages postés
12269
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
20 novembre 2018
- 14 juil. 2016 à 11:30
Bonjour

une petite précision, quand cgandco parle de Label, il ne s'agit pas du contrôle, mais de "l'ancre" associée à une instruction Goto.
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
>
Messages postés
12269
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
20 novembre 2018
- 14 juil. 2016 à 12:35
Bonjour,
Je viens conforter la remarque de Whismeril, que je salue.
- un label est un contrôle d'affichage (une étiquette)
- une instruction Goto ne renvoie ni à un Label, ni à une "étiquette", mais à une ligne spécifiée de code.
Il est vrai que VB dénonce l'absence d'un "label" (en Anglais) ou d'étiquette (en français) pour un Goto X alors que X n'est pas une ligne spécifiée de code. Mais tout cela n'est que le résultat d'une certaine pauvreté de la lanque de Shakespeare. VB a choisi le mot "label". Il aurait aussi bien pu choisir "flag" (drapeau) , "line" (ligne), etc ...
En Français, X (dans goto X) n'est pas une "étiquette", mais une "étiquette de ligne".
Voilà ...
Messages postés
12269
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
20 novembre 2018
>
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 14 juil. 2016 à 12:55
Bonjour aussi
Messages postés
219
Date d'inscription
mercredi 26 octobre 2011
Dernière intervention
22 juin 2017
>
Messages postés
12269
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
20 novembre 2018
- 14 juil. 2016 à 13:05
Bonjour,

Vu que l'on ne doit pas les utiliser, autant ne pas les nommer.

Bonne journée.
Messages postés
12269
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
20 novembre 2018
>
Messages postés
219
Date d'inscription
mercredi 26 octobre 2011
Dernière intervention
22 juin 2017
- 14 juil. 2016 à 13:11
Non, de la façon dont tu l'as formulé, on peut confondre avec le contrôle, d'ou mon intervention.
La précision d'Uc est bonne dans le sens ou l'expression "étiquette de ligne" est sans ambiguité.
Commenter la réponse de cgandco

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.