Possibilité d'utilisation d'une boucle ? [Résolu]

Signaler
Messages postés
23
Date d'inscription
jeudi 27 février 2014
Statut
Membre
Dernière intervention
19 mai 2018
-
Messages postés
23
Date d'inscription
jeudi 27 février 2014
Statut
Membre
Dernière intervention
19 mai 2018
-
Bonjour,

encore une question pour aujourd'hui :D
merci à tous ceux qui me donnent des renseignements pour le temps qu'ils y passent.

Dans le code suivant, existe-t-il une possibilité d'éviter la répétition par une boucle ?

	Sub Sub_CacheImage
		Me.img_01.Visible = False
		Me.img_02.Visible = False
		Me.img_03.Visible = False
		Me.img_04.Visible = False
		Me.img_05.Visible = False
		Me.img_06.Visible = False
		Me.img_07.Visible = False
		Me.img_08.Visible = False
	End Sub

3 réponses

Messages postés
14788
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 mai 2021
155
La solution la plus esthétique serait de faire une liste de tes images :
Private mLstImages as List(Of PictureBox)=new List(Of PictureBox)
mLstImages.Add(img_01)
mLstImages.Add(img_02)
...

Puis
for each lImage in mLstImages
lImage.Visible=False
Next

Messages postés
15924
Date d'inscription
mardi 11 mars 2003
Statut
Non membre
Dernière intervention
12 mai 2021
540
En supposant que img_XX soit un contrôle.
Tu peux te servir de la collection Controls de Me, qui comme sont nom l'indique contient les contrôles.
Avec un nom pareil, ça pourrait bien être des pictureBox.
  • Cas1 il n'y a que ces 8 pictureBox sur ta Form

Sub Sub_CacheImage
  For Each p As PictureBox In Me.Controls.OfType(Of PictureBox)()
	p.Visible = False
  Next p
End Sub
  • Cas2, il y a d'autres pictureBox, alors on va mettre une condition sur le nom, avec une Regex (à condition d'avoir mis un nom, création dynamique on n'y pense pas forcément)

Sub Sub_CacheImage
  For Each p As PictureBox In Me.Controls.OfType(Of PictureBox)().Where(Function(pic) Regex.IsMatch(pic.Name, "img_0[1-8]"))
	p.Visible = False
  Next p
End Sub
  • Cas3, tu as différents types de contrôles, et/ou avec des noms alambiqués et/ou pas forcément directement dépendants de Me (placés dans des conteneurs, GroupBox, TabControl etc...), Tu peux créer un tableau que tu parcourras le cas échéant.

Private mesControles() As Control = { textBox1, pictureBox1, dataGridView1 }

Sub Sub_CacheImage
  For Each c As Control In mesControles
	c.Visible = False
  Next c
End Sub

Messages postés
23
Date d'inscription
jeudi 27 février 2014
Statut
Membre
Dernière intervention
19 mai 2018

Bonjour et merci,

le cas 3 correspond parfaitement à mon besoin, et fonctionne très bien une fois mis en place dans mon code.

Merci