Possibilité d'utilisation d'une boucle ?

Résolu
Efferp Messages postés 24 Date d'inscription jeudi 27 février 2014 Statut Membre Dernière intervention 4 octobre 2021 - 4 mai 2018 à 23:53
Efferp Messages postés 24 Date d'inscription jeudi 27 février 2014 Statut Membre Dernière intervention 4 octobre 2021 - 10 mai 2018 à 17:54
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

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
5 mai 2018 à 00:25
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

1
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
5 mai 2018 à 00:04
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

0
Efferp Messages postés 24 Date d'inscription jeudi 27 février 2014 Statut Membre Dernière intervention 4 octobre 2021
10 mai 2018 à 17:54
Bonjour et merci,

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

Merci
0
Rejoignez-nous