PictureBox en VB.Net, Affichage image plusieurs fois

Résolu
dbigand Messages postés 13 Date d'inscription lundi 28 février 2005 Statut Membre Dernière intervention 26 novembre 2005 - 12 mars 2005 à 16:08
dbigand Messages postés 13 Date d'inscription lundi 28 février 2005 Statut Membre Dernière intervention 26 novembre 2005 - 15 mars 2005 à 17:44
En VB.Net, avec le code ci-dessous, je pensais afficher "image.bmp" à chaque boucle du code (5 fois).
En fait je n'affiche qu'une seule image, la dernière de la boucle.
Question : Comment afficher l'image à chaque boucle? D'avance Merci !!

Dim i As Integer
for i = 1 to
5
PictureBox1.Image = Image.FromFile("image.bmp")
PictureBox1.
Left = PictureBox1.Left + 20
i = i + 1
next i


Dbigand

13 réponses

cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
15 mars 2005 à 06:56
salut, j'envoi un code a l'etat brut avec timer et panel


Public Class Test1


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click


Dim i As Integer


For i = 0 To
4


Dim p As New
Panel


With
p


.Parent =
Me


.Top = 0


.Left = 30 + (i * 2)


.Height = 100


.Width = 100


.BackColor = Color.AliceBlue


.BorderStyle = BorderStyle.FixedSingle


.Visible =
True


End With


Next


Timer2.Interval = 500


Timer2.Start()


End Sub


Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Timer2.Tick


Dim p As
Panel


Dim C As Object


For Each C In Me
.Controls


If TypeOf C Is Panel Then


p =
CType(C, Panel)


With
p


.Top = 0


.Left = .Left + 30


.Height = 100


.Width = 100


.BackColor = Color.AliceBlue


.BorderStyle = BorderStyle.FixedSingle


.Visible =
True


End With


End If


Next


End
Sub


End Class


[mailto:liquide_vaisselle_76@hotmail.fr liquide_vaisselle_76@hotmail.fr]
liquide
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
12 mars 2005 à 16:26
il faut recréer un objet à chaque boucle.

sinon tu ne fais que déplacer le premier controle.

Séb



Sébastien FERRAND
Blog :
http://blogs.developpeur.org/sebmafate
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
12 mars 2005 à 17:09
Salut,
Soit tu recré soit tu temporises pour pouvoir l'affichée donc tu intègres un timer dans ta boucle.
Tu veux donner une impression de déplacement ?

Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0
dbigand Messages postés 13 Date d'inscription lundi 28 février 2005 Statut Membre Dernière intervention 26 novembre 2005
12 mars 2005 à 18:50
Merçi pour vos réponses. C'est très rapide !
En fait, je suis un amateur en retraite (un peu averti quand même) qui se lance dans VB.Net.

Je voudrai en fait créer plusieurs images identiques à des positions différentes comme dans un jeu de briques afin de pouvoir les détruire par la suite par une autre image tel qu'une balle par exemple.

J'ai bien compris vos conseils, j'ai essayé le timer mais je n'arrive pas à le faire fonctionner avec le code ci-dessous.

Private Sub MainFormLoad(sender As System.Object, e As System.EventArgs)

Dim i As Integer
'Création des 5 images à des positions différentes
for i = 1 to 5
PictureBox1.Image = Image.FromFile("image.bmp")
PictureBox1.Left = PictureBox1.Left + 20
timerBalle.enabled = true
i = i + 1
next i
timerBalle.enabled = False



End Sub


Private Sub TimerBalleTick(sender As System.Object, e As
System.EventArgs)


'Je pense qu'il faut peut-être se servir de cette procédure mais comment???




End Sub

Encore merçi.


Dbigand
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
12 mars 2005 à 20:32
En entete
Dim i as integer = 0

Private Sub
MainFormLoad(sender As System.Object, e As System.EventArgs)
With TimerBalle
.Start()
.Interval = 500
End With

End Sub

Private Sub
TimerBalleTick(sender As System.Object, e As System.EventArgs)
If i < 4 then
PictureBox1.Image = Image.FromFile("image.bmp")

PictureBox1.Left = PictureBox1.Left + 20
timerBalle.enabled = true
i = i + 1
Then
TimerBalle.Stop
End if

End Sub

j'espere ne pas trop avoir commis d'erreurs, par ailleur, il ne fait que deplacer le controle.

Bonne prog, [mailto:liquide_vaisselle_76@hotmail.fr liquide_vaisselle_76@hotmail.fr]
liquide
0
dbigand Messages postés 13 Date d'inscription lundi 28 février 2005 Statut Membre Dernière intervention 26 novembre 2005
13 mars 2005 à 16:11
Merci pour vos réponses.

En fait je voulez créer "dynamiquement" plusieurs images identiques à des positions différentes...
Comme VB.NET ne supporte pas les "control arrays", j'ai la solution ci-dessous, mai je ne sais pas du tout si c'est optimisé, il doit y avoir beaucoup mieux !!!

Structure BriqueStructure
'index d'une ImageListBrique.
Dim FlagIndex As Integer
'reference une PictureBox pour changer son image

Dim BriqueRef
As PictureBox

End Structure

'Tableau pour référencer par un index les pictureBox

Dim Brique(4)
As BriqueStructure

Dim i
As Integer

Private Sub MainFormLoad(sender As System.Object, e As System.EventArgs)

'On affecte dans le tableau les pictureBox crées niveau design

Brique(0).BriqueRef = pictureBrique0

Brique(1).BriqueRef = pictureBrique1

Brique(2).BriqueRef = pictureBrique2

Brique(3).BriqueRef = pictureBrique3

Brique(4).BriqueRef = pictureBrique4

'On affiche les images contenues dans une ImageListBrique

For i = 0
to 4

Brique(i).BriqueRef.Image = ImageListBrique.Images(i)

Brique(i).BriqueRef.
Left = Brique(i).BriqueRef.
Left + 200

Next i

End Sub


Dbigand
0
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
13 mars 2005 à 22:01
Salut
en dymanique, essais un code comme celui ci, il fonctionne chez moi

Dim
i As Integer


For i = 0 To 4

Dim p As New Panel

With p

.Parent = Me

.Top = 0

.Left = 30 + (i * 2)

.Height = 100

.Width = 100

.BackColor = Color.AliceBlue

.BorderStyle = BorderStyle.FixedSingle

.Visible = True

End With

Next

je l'ai mis dans un bouton, par ailleur j'ai lu (je ne sais plus ou) que le panel remplacait les picturebox ( on va me dire .. mais alors pourquoi les picturebox existent toujours dans les controles ---> je n'en sais absolument rien).

Bonne prog, [mailto:liquide_vaisselle_76@hotmail.fr liquide_vaisselle_76@hotmail.fr]
liquide
0
dbigand Messages postés 13 Date d'inscription lundi 28 février 2005 Statut Membre Dernière intervention 26 novembre 2005
14 mars 2005 à 12:17
Re -Salut et Re-merçi
Pour ce qui est du dymanique, c'est parfait et celà fonctionne très bien.

Dernière question : (car il ne faut pas abuser des bonnes choses). Je voudrai déplacer ces panels avec l'aide d'un Timer et en jouant par exemple sur ".Left = .Left + 10 (voir code ci-dessous). Mais je n'y arrive pas. Si je met Dim p As NewPanel dans la boucle, je pense que à chaque timer, il créait de nouveaux panels aux mêmes endroits et rien ne bouge.
Le code ci-dessous ne fait bouger que le dernier panel...







Dim p As New Panel
Private Sub TimerBalleTick(sender
As System.
Object, e
As System.EventArgs)




For i = 0
To 4

Me.Controls.Add(
Me.p)

With p

if .Visible =
True
.Parent =
Me
.Top = 30 * I
.
Left = .
Left + 10
.
Height = 30
.
Width = 20
.BackColor = Color.AliceBlue
.BorderStyle = BorderStyle.FixedSingle
.Visible = True
end if
End With
Next


End Sub


Encore Merci.

Dbigand
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
14 mars 2005 à 23:09
Salut,
Dans un premier temps tu ne dois pas créer tes Panel dans l'évènement de ton timer car tu crée des¨Panels mais tu ne les drétruit pas; tu vas donc vite te retrouver avec une multitude de panels aux même positions.

Donc je pense que tu dois créer tes panels avant et ensuite tu gères les déplacements à l'aide de ton timer.
Dans la sub du Timer utilises des Variables intermèdiaires que tu déclareras en static elles garderons leurs valeurs à chaque retour dans la sub.

Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0
dbigand Messages postés 13 Date d'inscription lundi 28 février 2005 Statut Membre Dernière intervention 26 novembre 2005
15 mars 2005 à 11:15
Mille Merci à Tous.

C'est exactement ce que je voulais faire!!! Ca marche parfaitement.
J'avoue que sans votre aide, jamais je n'y serai arrivé. En plus j'ai beaucoup appris.

Encore Merçi. Ce forum, c'est vraiment super.


Dbigand
0
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
15 mars 2005 à 11:21
salut, bin tu peux valider si la reponse est accepté , si c'est la mienne biensur ,c'est surtout pour mes chevilles , non je déconne. Content d'avoir pu aider

Bonne prog, [mailto:liquide_vaisselle_76@hotmail.fr liquide_vaisselle_76@hotmail.fr]
liquide
0
dbigand Messages postés 13 Date d'inscription lundi 28 février 2005 Statut Membre Dernière intervention 26 novembre 2005
15 mars 2005 à 17:41
Salut à l'expert "Liquide"

En lisant ta dernière réponse, tu parles de valider ta réponse.
J'ignore comment on fait cette validation. Je n'ai pas vu un "clic" à faire dans ce sens!!!
En réalité c'est la première fois que j'ai fait cette démarche dans le forum.
(qui est en même temps très "top" niveau technique et très "cool", j'ai parcouru quelques discussions!!!)

Si il y a une procédure de validation, dis moi ou je peux la trouver afin de m'exécuter.

Encore merci pour l'aide.


Dbigand
0
dbigand Messages postés 13 Date d'inscription lundi 28 février 2005 Statut Membre Dernière intervention 26 novembre 2005
15 mars 2005 à 17:44
Re-Salut à l'expert "Liquide"

Pardon j'ai enfin vu le clic à faire, il faut que je change de lunettes!!!
Encore Merci.


Dbigand
0
Rejoignez-nous