Correspondance PictureBox - Label [Résolu]

Messages postés
9
Date d'inscription
mercredi 19 mars 2003
Statut
Membre
Dernière intervention
14 février 2007
- - Dernière réponse : 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?
Afficher la suite 

9 réponses

Meilleure réponse
Messages postés
121
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
27 juillet 2006
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 211 internautes nous ont dit merci ce mois-ci

Commenter la réponse de addamsmercredi
Messages postés
121
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
27 juillet 2006
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 211 internautes nous ont dit merci ce mois-ci

Commenter la réponse de addamsmercredi
Messages postés
707
Date d'inscription
jeudi 5 mai 2005
Statut
Membre
Dernière intervention
5 janvier 2010
10
0
Merci
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>
Commenter la réponse de tof008
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57
0
Merci
un groupe de controles, oui, d'accord....
on est en .Net !!!

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
707
Date d'inscription
jeudi 5 mai 2005
Statut
Membre
Dernière intervention
5 janvier 2010
10
0
Merci
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
<>
Commenter la réponse de tof008
Messages postés
707
Date d'inscription
jeudi 5 mai 2005
Statut
Membre
Dernière intervention
5 janvier 2010
10
0
Merci
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<>
Commenter la réponse de tof008
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57
0
Merci
euh....

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

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

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
9
Date d'inscription
mercredi 19 mars 2003
Statut
Membre
Dernière intervention
14 février 2007
0
Merci
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...
Commenter la réponse de cs_kewan
Messages postés
9
Date d'inscription
mercredi 19 mars 2003
Statut
Membre
Dernière intervention
14 février 2007
0
Merci
Merci beaucoup addamsmercredi, j'avais effectivement un petit problème au niveau du dossier contenant mes images. Ta solution marche très bien!
Commenter la réponse de cs_kewan