Enlever une image [Résolu]

Signaler
Messages postés
206
Date d'inscription
samedi 17 janvier 2009
Statut
Membre
Dernière intervention
5 mars 2013
-
Messages postés
206
Date d'inscription
samedi 17 janvier 2009
Statut
Membre
Dernière intervention
5 mars 2013
-
Bonjour,

Je n'arrive pas a comprendre pourquoi ce bout de code ne marche pas (du moins comme je le comprends):

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim ctl As Control
        Dim pict As PictureBox
        For Each ctl In Me.Controls
            If TypeOf ctl Is PictureBox Then
                pict = CType(ctl, PictureBox)
                Controls.Remove(pict)
            End If
        Next
    End Sub


J'ai 8 images, et ce code ne m'enleve que les images 2, 4, 6 et 8.
Et pourquoi pas les nombres impairs???

J'appuie sur le bouton une deuxieme fois et cela m'enleve les images 3 et 7 (images 2 et 4 sur les quatres restantes). Et pourquoi pas les nombres impairs???

Si je continue, meme probleme...

Une explication simple doit pourtant exister!

Merci,
JLuc01

5 réponses

Messages postés
6992
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
28 octobre 2020
114
Bonjour,
Essaie ceci:

Dim ctl As Control
        For Each ctl In Me.Controls
            If TypeOf ctl Is PictureBox Then
                CType(ctl, PictureBox).Image = Nothing
            End If
        Next


@+Le Pivert
Messages postés
14733
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
146
Bonjour,

Car quand tu supprime une image tu passe à la suivante :
1, 2, 3
1 est détecté, donc le supprime
2,3
Et tu passe à la suivants (la 3).

Il faut donc tu tu utilises une boucle par indice et non un For Each.
De plus, il faut commencer par le dernier item et remonter.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
14733
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
146
Bonjour,

Voir peut être avec Linq (à voir comment ça peut passer) :
For Each lCtl In Me.Controls.OfType(Of PictureBox)

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
206
Date d'inscription
samedi 17 janvier 2009
Statut
Membre
Dernière intervention
5 mars 2013
1
Bonjour,

Oui, effectivement (erreur de debutant).
Mais, ceci etant dit, Je comprends comment faire avec un ListBox1:

For i = ListBox1.Items.Count - 1 To 0 Step -1
    ListBox1.Items.RemoveAt(i)
Next


Mais, avec un Control, il n'y a pas de methode Count ou RemoveAt.
Donc, il y a probablement une astuce tout simple. Mais, je ne vois pas.

JLuc01
Messages postés
206
Date d'inscription
samedi 17 janvier 2009
Statut
Membre
Dernière intervention
5 mars 2013
1
Re-Bonjour,

LePivert, ca marche impeccable. Merci.

NHenry, comme je le souligne dans mon deuxieme message, existe-t-il un moyen de faire qui ressemble a ce que j'ai fait avec le ListBox??? Je ne le crois pas, mais si tu as des idees...

En tout cas, merci a tous les deux pour votre aide.

A+
JLuc01