IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

For each sur SelectedIndices


Sujet :

Windows Forms

  1. #1
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut For each sur SelectedIndices
    Bonsoir,

    Je chercher simplement à supprimer des lignes sélectionnées d'un ListBox (ListFiles).

    J'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub ClickDroitSuppr_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ClickDroitSuppr.Click, MenuSuppr.Click, SousMenuSuppr.Click
     
    Dim Index As Integer
     
    For Each Index In ListFiles.SelectedIndices
      ListFiles.Items.Remove(ListFiles.GetItemText(ListFiles.Items(Index)))
    Next
     
    End Sub
    Pour 1 item sélectionné, ça fonctionne, mais pour 2, un seul est supprimé, pour 3, 2, pour 4, 3, etc...

    D'où vient le problème?
    Merci

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Tout simplement parce que lorsque tu retires un élément de la liste les index suivants ne sont alors plus valides puisque la liste sur laquelle sont basés les index à changée.

    Pour faire ce que tu veux, le plus simple c'est d'utiliser une boucle while et la propriété ListBox.SelectedItems. Tant qu'il y a des éléments sélectionnés tu supprimes le premier élément sélectionné et tu devrais obtenir le résultat voulu.
    Pas de questions techniques par MP

  3. #3
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Merci, j'ai fait ça et ça a l'air de fonctionner.
    S'il y a mieux je suis preneur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim C As Integer = TableIndex - 1
    While C <> -1
       If ListFiles.GetSelected(C) = True Then
          Array.Clear(TableFiles, C, 1)
          Array.Clear(TableFilesAbsolut, C, 1)
          ListFiles.Items.Remove(ListFiles.GetItemText(ListFiles.Items(C)))
          TableIndex = TableIndex - 1
       End If
       C = C - 1
    End While

  4. #4
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Si on considère la suppression dans la ListBox on peut faire beaucoup plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    While ListFiles.SelectedItems.Count > 0
        ListFiles.Items.Remove(ListFiles.SelectedItems(0))
    End While
    Ensuite, tes tableaux servant à priori à mémoriser un nom long (pour le traitement) et un nom court (pour l'affichage), le plus simple consiste à créer une classe qui représentera un fichier (avec nom long et un nom court) et de faire une liste de "fichiers" (List(Of T)) que tu bindes sur la ListBox (DataSource, DisplayMember).

    Par contre comment mets-tu le code dans tes messages ? Car il y a plein de balises de formatage inutiles (taille de police, couleur, ...) dans tes messages.
    Pas de questions techniques par MP

  5. #5
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    Ensuite, tes tableaux servant à priori à mémoriser un nom long (pour le traitement) et un nom court (pour l'affichage), le plus simple consiste à créer une classe qui représentera un fichier (avec nom long et un nom court) et de faire une liste de "fichiers" (List(Of T)) que tu bindes sur la ListBox (DataSource, DisplayMember).
    Merci, je verrai ça plus tard, je commence soft

    Citation Envoyé par StormimOn Voir le message
    Par contre comment mets-tu le code dans tes messages ? Car il y a plein de balises de formatage inutiles (taille de police, couleur, ...) dans tes messages.
    Mmm je mets un copier-coller de VB (et les couleurs sont conservées). Et comme ça plante un peu, je remodifie.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 09/04/2009, 09h34
  2. Réponses: 1
    Dernier message: 22/04/2008, 21h25
  3. For each sur Composant ? Initialiser des composants.
    Par 19cmos83 dans le forum Interfaces Graphiques en Java
    Réponses: 8
    Dernier message: 11/10/2007, 11h02
  4. Faire un For Each sur le MemberShip
    Par zooffy dans le forum ASP.NET
    Réponses: 2
    Dernier message: 19/07/2007, 11h49
  5. boucle for each sur un groupe
    Par LeXo dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 06/04/2007, 21h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo