Créer Boucle for qui next a chaque click d'un bouton
fox97
Messages postés4Date d'inscriptionmercredi 16 septembre 2015StatutMembreDernière intervention14 juillet 2016
-
Modifié par fox97 le 14/07/2016 à 00:56
Whismeril
Messages postés19022Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention17 avril 2024
-
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
cgandco
Messages postés219Date d'inscriptionmercredi 26 octobre 2011StatutMembreDernière intervention22 juin 20179 14 juil. 2016 à 09:01
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
Whismeril
Messages postés19022Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention17 avril 2024656 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.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211
>
Whismeril
Messages postés19022Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention17 avril 2024 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à ...
Whismeril
Messages postés19022Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention17 avril 2024656
>
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018 14 juil. 2016 à 12:55
Bonjour aussi
cgandco
Messages postés219Date d'inscriptionmercredi 26 octobre 2011StatutMembreDernière intervention22 juin 20179
>
Whismeril
Messages postés19022Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention17 avril 2024 14 juil. 2016 à 13:05
Bonjour,
Vu que l'on ne doit pas les utiliser, autant ne pas les nommer.
Bonne journée.
Whismeril
Messages postés19022Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention17 avril 2024656
>
cgandco
Messages postés219Date d'inscriptionmercredi 26 octobre 2011StatutMembreDernière intervention22 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é.
14 juil. 2016 à 11:30
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.
14 juil. 2016 à 12:35
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à ...
14 juil. 2016 à 12:55
14 juil. 2016 à 13:05
Vu que l'on ne doit pas les utiliser, autant ne pas les nommer.
Bonne journée.
14 juil. 2016 à 13:11
La précision d'Uc est bonne dans le sens ou l'expression "étiquette de ligne" est sans ambiguité.