cs_kewan
Messages postés9Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention14 février 2007
-
10 juil. 2006 à 11:02
cs_kewan
Messages postés9Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention14 février 2007
-
10 juil. 2006 à 14:53
Bonjour,
Voici une question (VB 2005 Express) qui paraitra certainement basique pour certains/certaines, mais je parviens toujours pas à régler ce problème:
Je dispose de 5 "label" et de 5 "picturebox". Lorsque la feuille se charge, je veux que:
- l'image 1 corresponde au label 1,
- l'image 2 corresponde au label 2,
- etc.
Autrement dit, par le code:
' Image 1
Dim Monimage1 As New Bitmap(My.Application.Info.DirectoryPath & "\Ecussons" & Label1.Text & ".gif")
PictureBox1.Image = Monimage1
' Image 2
Dim Monimage2 As New Bitmap(My.Application.Info.DirectoryPath & "\Ecussons" & Label2.Text & ".gif")
PictureBox2.Image = Monimage2
...
Cette méthode fonctionne (les images s'affichent et correspondent bien), mais ce n'est pas beau... surtout lorsqu'on dispose d'une quinzaine d'images! N'y aurait-il pas moyen de faire ça proprement, histoire de limiter le nombre de lignes?
addamsmercredi
Messages postés121Date d'inscriptiondimanche 3 octobre 2004StatutMembreDernière intervention27 juillet 2006 10 juil. 2006 à 11:52
Voici un code permettant de faire cela (la méthode de tof008 ne fonctionne pas car VB 2005 n'est pas aussi simple que cela).
J'ai supposé que tous les Labels et PictureBox se trouvent sur la feuille, qu'il y a autant de Labels que de PictureBox et qu'il n'y en a pas d'autres servant à autre chose.
Pour ne pas avoir de problème, le mieux est de les mettre dans des conteneurs et de ne parcourir que les contrôles des conteneurs (ici pour l'exemple, je parcous tous les contrôles de la feuille).
Dim labels As New List(Of Label)
Dim pictures As New List(Of PictureBox)
Dim ctl As Control
Dim pic As PictureBox
Dim i As Integer
For Each ctl In Me.Controls
If TypeOf (ctl) Is Label Then
labels.Add(ctl)
ElseIf TypeOf (ctl) Is PictureBox Then
pictures.Add(ctl)
End If
Next
i = 0
For Each pic In pictures
pic.Image = New Bitmap(My.Application.Info.DirectoryPath & "\Ecussons" & labels(i).Text & ".gif")
i += 1
Next
addamsmercredi
Messages postés121Date d'inscriptiondimanche 3 octobre 2004StatutMembreDernière intervention27 juillet 2006 10 juil. 2006 à 14:31
Cette erreur se produit si une image n'existe pas.
Ajoute le test
If My.Computer.FileSystem.FileExists(My.Application.Info.DirectoryPath & "\Ecussons" & labels(i).Text & ".gif") Then
pic.Image = New Bitmap(My.Application.Info.DirectoryPath & "\Ecussons" & labels(i).Text & ".gif")
End If
J'ai mis ce code à titre d'exemple surtout pour donner une idée.
Mais pour l'utiliser tel quel, il faut être sûr, entre autre, qu'il n'y ait pas de Labels en trop qui n'ont rien à voir avec les images.
C'est pour cela que je conseille d'utiliser des conteneurs comme des Panels et d'adapter le code en conséquence.
tof008
Messages postés695Date d'inscriptionjeudi 5 mai 2005StatutMembreDernière intervention 5 janvier 201033 10 juil. 2006 à 11:15
tu peux essayer de faire un group de controle avec les pictureBox. Et ensuite tu fais une boucle avec laquelle tu fais correspondre le num des images a l'index des pictureBox.
du style :
for i = 1 to 10
PictureBox1(i).Image = Monimage" & i & "
next i
(Si la réponse vous convient, appuyez sur réponse acceptée...)
Il y a plusieurs facon d'être con ,mais un con choisit toujours la pire
< body>
tof008
Messages postés695Date d'inscriptionjeudi 5 mai 2005StatutMembreDernière intervention 5 janvier 201033 10 juil. 2006 à 11:55
Bon c'est sur que par rapport à ton code addamsmercredi le mien parait vraiment trop trop simple lol! Mais bon je me suis dit que si ca marchait avec vb, pourquoi pas avec vb 2005
(Si la réponse vous convient, appuyez sur réponse acceptée...)
Il y a plusieurs facon d'être con ,mais un con choisit toujours la pire<>