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

Efferp 23 Messages postés jeudi 27 février 2014Date d'inscription 19 mai 2018 Dernière intervention - 4 mai 2018 à 23:53 - Dernière réponse : Efferp 23 Messages postés jeudi 27 février 2014Date d'inscription 19 mai 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

3 réponses

NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 10 août 2018 Dernière intervention - 5 mai 2018 à 00:04
0
Merci
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

Commenter la réponse de NHenry
Whismeril 11955 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 août 2018 Dernière intervention - 5 mai 2018 à 00:25
0
Merci
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

Commenter la réponse de Whismeril
Efferp 23 Messages postés jeudi 27 février 2014Date d'inscription 19 mai 2018 Dernière intervention - 10 mai 2018 à 17:54
0
Merci
Bonjour et merci,

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

Merci
Commenter la réponse de Efferp

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.