Correspondance PictureBox - Label

Résolu
cs_kewan Messages postés 9 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 14 février 2007 - 10 juil. 2006 à 11:02
cs_kewan Messages postés 9 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 14 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?

9 réponses

addamsmercredi Messages postés 121 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 27 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
3
addamsmercredi Messages postés 121 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 27 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.
3
tof008 Messages postés 695 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 5 janvier 2010 33
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>
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 juil. 2006 à 11:21
un groupe de controles, oui, d'accord....
on est en .Net !!!

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0

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

Posez votre question
tof008 Messages postés 695 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 5 janvier 2010 33
10 juil. 2006 à 11:27
Autant pour moi 2359 Renfield ...Alors sans groupe de controle :
for i = 1 to 10


PictureBox" & i & ".Image = Monimage" & i & "

next i

Voila, maintenant je sais pas si ca marche avec .net, mais l'idée est là lol!











 





(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
<>
0
tof008 Messages postés 695 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 5 janvier 2010 33
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<>
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 juil. 2006 à 12:04
euh....

PictureBox" & i & ".Image = Monimage" & i & "

ca fonctionne pas en VB6 non plus, tu sais ^^

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
cs_kewan Messages postés 9 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 14 février 2007
10 juil. 2006 à 13:14
En laissant le code tel quel de Addamsmercredi, sur cette ligne:


pic.Image = New Bitmap(My.Application.Info.DirectoryPath & "\Ecussons" & labels(i).Text & ".gif")


J'ai l'erreur suivante:


L'exception ArgumentException n'a pas été gérée
Le paramètre n'est pas valide.


Mais je pense que nous sommes sur le bon chemin...
0
cs_kewan Messages postés 9 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 14 février 2007
10 juil. 2006 à 14:53
Merci beaucoup addamsmercredi, j'avais effectivement un petit problème au niveau du dossier contenant mes images. Ta solution marche très bien!
0
Rejoignez-nous