PictureBox en VB.Net, Affichage image plusieurs fois [Résolu]

Messages postés
13
Date d'inscription
lundi 28 février 2005
Dernière intervention
26 novembre 2005
- 12 mars 2005 à 16:08 - Dernière réponse :
Messages postés
13
Date d'inscription
lundi 28 février 2005
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
Afficher la suite 

13 réponses

Meilleure réponse
Messages postés
1018
Date d'inscription
samedi 22 mars 2003
Dernière intervention
24 juin 2008
- 15 mars 2005 à 06:56
3
Merci
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

Merci cs_liquide 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
- 12 mars 2005 à 16:26
0
Merci
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
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Dernière intervention
17 mars 2017
- 12 mars 2005 à 17:09
0
Merci
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é
Messages postés
13
Date d'inscription
lundi 28 février 2005
Dernière intervention
26 novembre 2005
- 12 mars 2005 à 18:50
0
Merci
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
Messages postés
1018
Date d'inscription
samedi 22 mars 2003
Dernière intervention
24 juin 2008
- 12 mars 2005 à 20:32
0
Merci
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
Messages postés
13
Date d'inscription
lundi 28 février 2005
Dernière intervention
26 novembre 2005
- 13 mars 2005 à 16:11
0
Merci
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
Messages postés
1018
Date d'inscription
samedi 22 mars 2003
Dernière intervention
24 juin 2008
- 13 mars 2005 à 22:01
0
Merci
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
Messages postés
13
Date d'inscription
lundi 28 février 2005
Dernière intervention
26 novembre 2005
- 14 mars 2005 à 12:17
0
Merci
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
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Dernière intervention
17 mars 2017
- 14 mars 2005 à 23:09
0
Merci
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é
Messages postés
13
Date d'inscription
lundi 28 février 2005
Dernière intervention
26 novembre 2005
- 15 mars 2005 à 11:15
0
Merci
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
Messages postés
1018
Date d'inscription
samedi 22 mars 2003
Dernière intervention
24 juin 2008
- 15 mars 2005 à 11:21
0
Merci
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
Messages postés
13
Date d'inscription
lundi 28 février 2005
Dernière intervention
26 novembre 2005
- 15 mars 2005 à 17:41
0
Merci
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
Messages postés
13
Date d'inscription
lundi 28 février 2005
Dernière intervention
26 novembre 2005
- 15 mars 2005 à 17:44
0
Merci
Re-Salut à l'expert "Liquide"

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


Dbigand

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.