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

VB.NET Discussion :

Supprimer des fichiers à partir des items sélectionnés d'une listbox [Débutant]


Sujet :

VB.NET

  1. #1
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut Supprimer des fichiers à partir des items sélectionnés d'une listbox
    Bonjour,

    Tout est dans le titre. Mais je vais quand-même développer au maximum mon problème.

    CE QUE J'AI :
    Alors voilà, j'ai une listbox, dont les éléments sont les noms avec extension de fichiers contenus dans un dossier donné. Et j'ai à côté un bouton supprimer.

    CE QUE JE SOUHAITES FAIRE :
    J'aimerais donc que lorsque l'utilisateur choisis un ou plusieurs items de la listbox (et donc par extension, les fichiers auxquels ils font référence), et qu'il clic sur le bouton supprimer, cela supprime les fichiers. Je rafraîchit ensuite la listbox qui scan le dossier et affiche donc les noms des fichiers restant dans le dossier.

    CE QUE J'AI TESTE :
    J'ai donc testé un bout de code, qui est une boucle utilisant la collection d'items de la listbox. En gros ça donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim fichier as string
     
    For each fichier in listbox.SelectedItems.tostring
    try
    My.computer.system.deletefile(chemin_du_dossier & fichier)
     
    'Ici le code pour rafraîchir la listbox comme expliqué au-dessus'
     
    catch ex as exception
    messagebox("Erreur lors de la suppression" & vbcrlf & vbcrlf & "Message :" ex.message)
     
    end try
    next fichier
    Mais ce code m'affiche une msgbox disant que le fichier "S",et le fichier "y",et le fichier "s" ... et ainsi de suite, les lettre formant, de tête, un truc du genre "System.Forms.Listbox.basketobject ..." un truc qui signifie une collection d'objet j'imagine vu le mot basket. Si vous voulez exactement la "phrase" je vous la donnerai, mais je pense pas que ça soit super important.

    Voilà donc mon problème. Si quelqu'un a déjà testé ce genre de prouesse, je suis preneur car je ne vois pas du tout comment faire. Pour supprimer un fichier à partir d'un seul élément sélectionné (mode multi select false), je sais faire, ça fonctionne très bien, mais en multi select je ne vois.

    Merci beaucoup d'avance pour votre aide précieuse.

    Cordialement-

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,

    Il suffit de parcourir la collection d'éléments sélectionnés (le tostring n'a rien à faire là, au passage il t'indique "System.Windows.Forms.ListBox+SelectedObjectCollection") et raffraichir la liste box à la fin de toutes les suppressions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For Each fichier In listbox.SelectedItems
      try
        My.Computer.FileSystem.DeleteFile(chemin_du_dossier & fichier)    ' efface le fichier
      Catch ex As Exception
        MessageBox.Show("Erreur lors de la suppression" & vbcrlf & vbcrlf & "Message :" ex.Message)
      End Try
    Next
    'Ici le code pour rafraîchir la listbox

  3. #3
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par rv26t Voir le message
    Bonjour,

    Il suffit de parcourir la collection d'éléments sélectionnés (le tostring n'a rien à faire là, au passage il t'indique "System.Windows.Forms.ListBox+SelectedObjectCollection") et raffraichir la liste box à la fin de toutes les suppressions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For Each fichier In listbox.SelectedItems
      try
        My.Computer.FileSystem.DeleteFile(chemin_du_dossier & fichier)    ' efface le fichier
      Catch ex As Exception
        MessageBox.Show("Erreur lors de la suppression" & vbcrlf & vbcrlf & "Message :" ex.Message)
      End Try
    Next
    'Ici le code pour rafraîchir la listbox
    D'après ce que j'ai compris : Les items qu'il ajoute ne contiennent pas le chemin complet du fichier mais uniquement le nom + l'extension. Et c'est là qu'il bloque.

    Il existe la possibilité de créer une sorte de classe qui stockerait les valeurs associatives comme un dictionnaire (Key/Value).
    Ensuite il faudrait ajouter dynamiquement les items du type de ta classe et retourner la valeur associée grace aux propriétés valueMember et DislayMember mais à mon sens ca fait vraiment usine à gaz.....préfère utiliser le composant Listview bien plus complet en terme de possibilités,de paramétrages et esthétique également !

    A+

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Citation Envoyé par wallace1 Voir le message
    D'après ce que j'ai compris : Les items qu'il ajoute ne contiennent pas le chemin complet du fichier mais uniquement le nom + l'extension.
    Oui, et alors.

    Citation Envoyé par wallace1 Voir le message
    Et c'est là qu'il bloque.
    Ben non
    Citation Envoyé par Shennong Voir le message
    j'ai une listbox, dont les éléments sont les noms avec extension de fichiers contenus dans un dossier donné.
    et
    Citation Envoyé par Shennong Voir le message
    Je rafraîchit ensuite la listbox qui scan le dossier et affiche donc les noms des fichiers restant dans le dossier.
    Apparement, il traite par dossier, il n'a donc dans sa ListBox que les fichiers d'un dossier. Ou alors il a mal expliqué cette partie.

  5. #5
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    @rv26t :

    J'ai du mal comprendre.....alors...... ...

  6. #6
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut
    Bonjour et merci de vos réponse.

    Alors pour reprendre :

    - Oui lorsque je récupère un item, j'ai seulement, par exemple : toto.txt (ce qui est affiché dans ma listbox. C'est pour cela que je rajoute le chemin avant à partir d'une clé de registre qui le contient. L'erreur affichée lors de la tentative de suppression me marque bien "Impossible de trouver le fichier 'C:\tutu\toto\tata\S'", puis avec "Y", etc ... et ainsi de suite pour former la phrase "System.Windows.Forms.ListBox+SelectedObjectCollection". Donc du coup, le chemin est bon, c'est sûr, mais je ne parviens juste pas à récupérer correctement les noms des items de ma collection comme indiqué dans ma listbox.

    - Ensuite, j'ai déjà essayé également en retirant le ToString à la fin de Listbox.selecteditems, mais j'ai exactement le même résultat. Mais je suis obligé de caster en string, c'est donc pourquoi au moins la variable fichier doit être de type string. Et pourtant cela ne fonctionne pas. C'est à s'en arracher les cheveux !!! Je pige vraiment pas l'erreur.

    - J'adorerais utiliser un listview, mais c'est plus compliqué, en ce sens qu'il n'existe pas d'équivalent "mono-item" comme dans la listbox avec listbox.selecteditem. On ne peut que créer des collection avec listview.selecteditemS. Du coup, si c'est aussi galère à gérer qu'avec la listbox, c'est ême pas la peine. Pourtant oui, j'aimerai beaucoup, c'est plus stylé. D'après ce que j'ai compris on peut faire apparaître des icônes (ça remplacerai avantageusement mes boutons de gestion "ajouter", "supprimer" et "renommer"). On peut afficher une petite image dans la première colonne à côté des items ... mon appli étant un agrégateur d'émulateurs, et listbox servant à afficher les roms, je pourrai afficher une petite puce électronique par exemple. On peut aussi afficher plusieurs colonne, je pourrai ainsi récupérer des infos des fichiers de roms et les afficher .... bref oui, ce serait génial un listview, mais je ne maîtrise pas du tout ce contrôle.

    Si vous avez d'autres questions n'hésitez pas, je dois vraiment résoudre ce problème de listbox à la con qui me pourri mon dev.

    Merci beaucoup à vous !

  7. #7
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonjour,


    Bon ca me rassure j'ai pas trop de mal en compréhension de texte....

    Brefff...sinon je reviens sur le listview, ne te soucis pas tu peux absolument tout faire avec !
    Pour l'implémenter :

    Fait un petit projet qui ressemble à cela :

    http://imabox.fr/a3/1410051048omRgaD58.png

    Puis le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    Imports System.IO
     
    Public Class Form1
     
        '~######################################
        'Juste pour te montrer comment est paramétré le listview car sinon c'est paramétrable depuis la propertyGrid directement !
        'Me.ListView1.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader1, Me.ColumnHeader2, Me.ColumnHeader3})
        'Me.ListView1.Location = New System.Drawing.Point(12, 67)
        'Me.ListView1.Name = "ListView1"
        'Me.ListView1.Size = New System.Drawing.Size(574, 288)
        'Me.ListView1.TabIndex = 0
        'Me.ListView1.UseCompatibleStateImageBehavior = False
        'Me.ListView1.View = System.Windows.Forms.View.Details
        'Me.ListView1.FullRowSelect = True
        '############################################
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim filesList As String() = System.IO.Directory.GetFiles(My.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\Internet Explorer", "*.dll")
            'On déclare un tableau de 3 entrées (Extension, nom de fichier, chemin complet)
            Dim items() As String = New String(2) {}
            'On parcours la liste de fichiers protant l'extension ".dll" 
            For Each f In filesList
                Dim fi As New FileInfo(f)
                items(0) = fi.Extension
                items(1) = fi.Name
                items(2) = fi.FullName
                'On instancie un nouvel objet ListviewItem pour chaque fichier trouvé dans cette boucle !
                Dim item As New ListViewItem(items) With _
                    {.ToolTipText = fi.FullName}
                'On ajoute le listviewiTem dans notre Listview1
                Me.ListView1.Items.Add(item)
            Next
        End Sub
     
        Private Sub ListView1_ItemSelectionChanged(sender As Object, e As ListViewItemSelectionChangedEventArgs) Handles ListView1.ItemSelectionChanged
            'Si un item est sélectionné alors on affiche son chemin complet
            If e.IsSelected Then
                MsgBox(e.Item.SubItems(2).Text)
            End If
        End Sub
     
     
     
    End Class
    Le résultat :

    http://imabox.fr/a3/1410051049Tu5yz139.png


    J'espère que cela réponds à toutes tes questions ??

    PS : si tu as de gros traitements à gérer attends-toi à devoir étendre tes connaissances en te renseignant sur la mise en place de threads pour éviter que ta partie UI ne se fige !

    A+ et bon codage.

  8. #8
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2012
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 330
    Points : 774
    Points
    774
    Par défaut
    Bonjour,

    1) Une solution avec un listview :

    Soit un formulaire avec 2 boutons
    -btnOuvrir
    -btnDelete

    et un listview
    -Mode détail
    -Ajout d'une colonne "Nom du fichier"

    Le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    Imports System.IO
    Public Class Form1
        'Propriété pour stocker le chemin d'accès au dossier
        Public Overridable Property SelectedFolder As String
     
        Private Sub btnOuvrir_Click(sender As Object, e As EventArgs) Handles btnOuvrir.Click
            'on ouvre une boite de dialogue pour choisir le dossier
            Dim ofdg As New FolderBrowserDialog
            If ofdg.ShowDialog = Windows.Forms.DialogResult.OK Then
                Me.SelectedFolder = ofdg.SelectedPath
                Add_Refresh_Listview(Me.SelectedFolder)
            End If
        End Sub
     
        Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click
            'Pour tout les éléments sélectionnés dans le listview
            For Each _Item As ListViewItem In ListView1.SelectedItems
                Try
                    File.Delete(_Item.SubItems(1).Text) 'Suppression du fichier. SubItems(1).Text pour récupérer le Path complet du fichier
                Catch ex As Exception
                    MessageBox.Show(ex.Message)
                End Try
            Next
            'Il faut rafraichir le listview
            Add_Refresh_Listview(Me.SelectedFolder)
        End Sub
     
        Private Sub Add_Refresh_Listview(ByVal _Path As String)
            'Suppression de tout les items
            ListView1.Items.Clear()
            Try
                'Pour tout les fichiers du dossier, on ajoute un ListViewItem
                For Each _File As String In Directory.GetFiles(_Path)
                    Dim lstv As New ListViewItem(Path.GetFileName(_File)) 'Création du nouveau ListViewItem avec le nom du fichier et son extension
                    With lstv
                        lstv.SubItems.Add(_File) 'On ajoute un subItem contenant le chemin d'accès complet au fichier
                    End With
                    ListView1.Items.Add(lstv) 'On ajoute le ListViewItem à la collection Items du ListView
                Next
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
     
        End Sub
    End Class
    Reste à mettre un peu en forme, ou changer le mode d'affichage. L'idée restant d'utiliser un contrôle ayant des items avec propriétés.

    2) Une solution avec un ListBox :
    Le même formulaire avec un ListBox à la place du ListView

    Les items d'un listbox sont des objets. le texte affiché dans le listbox est le texte renvoyé par la méthode .ToString de l'objet.

    J'ai donc créé un objet nommé "MyFile" avec sa méthode .ToString modifiée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Class MyFile
        Public Overridable Property Name As String
        Public Overridable Property Path As String
        Public Sub New(ByVal _Name As String, ByVal _Path As String)
            Me.Name = _Name
            Me.Path = _Path
        End Sub
        Public Overrides Function ToString() As String
            Return Me.Name
        End Function
    End Class
    Et voici le code du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    Imports System.IO
    Public Class Form2
        Public Overridable Property FolderPath As String
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim fdg As New FolderBrowserDialog
            If fdg.ShowDialog = Windows.Forms.DialogResult.OK Then
                Me.FolderPath = fdg.SelectedPath
                UpdateListBox(Me.FolderPath)
            End If
        End Sub
        Public Sub UpdateListBox(ByVal _Path As String)
            Me.ListBox1.Items.Clear()
            For Each _File As String In Directory.GetFiles(_Path)
                Me.ListBox1.Items.Add(New MyFile(Path.GetFileName(_File), Path.GetFullPath(_File))) 'On ajoute un Objet MyFile aux Items du ListBox
            Next
        End Sub
     
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            Dim obj As MyFile = CType(Me.ListBox1.SelectedItem, MyFile)
            MessageBox.Show(obj.Path)
        End Sub
    End Class
    En gros, ça reviens au même sauf que tu peux ajouter autant de propriétés que tu veux à ton objet MyFile.

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Citation Envoyé par Shennong Voir le message
    Pour supprimer un fichier à partir d'un seul élément sélectionné (mode multi select false), je sais faire, ça fonctionne très bien, mais en multi select je ne vois.
    Tiré de MSDN sur les listbox
    ListBox.SelectedItems, propriété
    ...
    Pour une ListBox à sélection multiple, cette propriété retourne une collection contenant tous les éléments sélectionnés dans ListBox.Pour une ListBox à sélection unique, cette propriété retourne une collection contenant un seul élément, en l'occurrence le seul élément sélectionné dans ListBox.
    Donc sélection unique ou multiple c'est pareil.
    Citation Envoyé par Shennong Voir le message
    - Oui lorsque je récupère un item, j'ai seulement, par exemple : toto.txt (ce qui est affiché dans ma listbox. C'est pour cela que je rajoute le chemin avant à partir d'une clé de registre qui le contient. L'erreur affichée lors de la tentative de suppression me marque bien "Impossible de trouver le fichier 'C:\tutu\toto\tata\S'", puis avec "Y", etc ... et ainsi de suite pour former la phrase "System.Windows.Forms.ListBox+SelectedObjectCollection". Donc du coup, le chemin est bon, c'est sûr, mais je ne parviens juste pas à récupérer correctement les noms des items de ma collection comme indiqué dans ma listbox.

    - Ensuite, j'ai déjà essayé également en retirant le ToString à la fin de Listbox.selecteditems, mais j'ai exactement le même résultat. Mais je suis obligé de caster en string, c'est donc pourquoi au moins la variable fichier doit être de type string. Et pourtant cela ne fonctionne pas. C'est à s'en arracher les cheveux !!! Je pige vraiment pas l'erreur.
    Le code que j'indique donne bien toto.txt s'il est présent dans la listebox.
    Avec mon code que contient "chemin_du_dossier & fichier" en regardant avec le débuggeur ? (ou un messagebox) pourquoi caster en string alors que fichier est de type string. Il y a peut-être quelque chose que tu n'as pas indiqué.

    Le résultat en image chez moi avec un test, je récupère bien la valeur présente dans la listebox, après c'est juste une concaténation de chaine avec le chemin.
    Nom : selection listbox 1.jpg
Affichages : 752
Taille : 11,3 KoNom : selection listbox 2.jpg
Affichages : 751
Taille : 10,7 Ko

  10. #10
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Une question bête comme ça.
    Les éléments que tu ajoutes dans ta listebox c'est bien des chaînes de caractère, pas des objets.
    Parceque le "listbox.text" te renvoie bien une chaîne, il fait un tostring implicite, mais dans la collection "selecteditems" il ne le fait pas.

    Et la variable "dim fichier as string" déclarée en string dans ton code est caché par la variable "fichier" de la boucle "For Each" qui elle sera du type des éléments mis dans la listbox (voir la portée des variables)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim fichier as string ' ne sera pas utilisé dans la boucle For Each
    For each fichier in listbox.SelectedItems
    ' ici fichier est du type des éléments que tu as ajouté dans ta listbox, si c'est un objet rajouter tostring sur l'objet pour obtenir le texte
    My.Computer.FileSystem.DeleteFile(chemin_du_dossier & fichier.Tostring) '
    [Edit]J'avais pas vu la modif complémentaire de Rainui sur les listbox

  11. #11
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut
    Bonsoir,

    Je passe en speed pour voir les réponses. Je vois que ça a cogité, et je vous en remercie beaucoup. J'ai survolé rapidement les réponses. Je regarderais ça lundi en détail, pour le moment je ne suis pas chez moi. S'il y a des solutions je testerais donc tout ça lundi et je vous donnerais mon feedback.

    Merci encore pour toutes ces réponses et à bientôt !

    Cordialement-

  12. #12
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Montre nous le code pour remplir la ListBox.

  13. #13
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut
    Bonjour,

    Alors je vais me mettre à tester les solution proposées. Pour rv26t, voici le code utilisé pour peupler la listbox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     'On définit le chemin des roms (celui utilisé lors de l'installation)
                cheminconsole = chemin + "ATARI_7800\"
                Dim files = My.Computer.FileSystem.GetFiles(chemin + "ATARI_7800\", FileIO.SearchOption.SearchAllSubDirectories, "*.*")
                For Each rom As String In files
                    resultat = IO.Path.GetFileName(rom)
                    lst_roms.Items.Add(resultat)
                Next
    J'essaye de tester des choses, de chercher un peu et je reviens ...

    Merci encore de bien vouloir m'aider.

  14. #14
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut
    Je ne comprends pas

    Voir le code et l'erreur ici, telle que ça apparaît à la base : ICI

    Cordialement-

  15. #15
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut
    OMG j'ai enfin trouvé !!!!!!!!

    En fait, c'est une PUTAIN (pardonnez l'expression) d'erreur de débutant. Le problème c'était que je rafraîchissais ma listbox entre chaque fichier supprimé ... du coup forcément il appréciait pas trop, vu que l'énumérateur changeait à chaque fois. J'ai simplement déplacé mon bloc d'instruction pour rafraîchir ma listbox en dehors de ma boucle et hop, ça fonctionne nickel ....

    Je m'en veux purée, je suis désolé de vous avoir fait perdre votre temps avec une erreur aussi débile

    Voici le code modifié en question, par rapport à la capture faite dans mon poste précédent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     For Each fichier In lst_roms.SelectedItems
                            Try
                                My.Computer.FileSystem.DeleteFile(cheminconsole + fichier.ToString)
     
                            Catch ex As Exception
     
                                ' On gère un éventuel problème
                                MessageBox.Show("Une erreur est survenue lors de la suppression. Le message est :" & vbCrLf & vbCrLf & ex.Message)
     
                            End Try
                        Next
     
                        'On rafraîchit la listbox
                        lst_roms.Items.Clear()
                        Dim files = My.Computer.FileSystem.GetFiles(cheminconsole, FileIO.SearchOption.SearchAllSubDirectories, "*.*")
                        For Each rom As String In files
                            resultat = IO.Path.GetFileName(rom)
                            lst_roms.Items.Add(resultat)
                        Next

  16. #16
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut
    Du coup, si c'est OK pour vous, que vous n'avez plus de question, je propose de clore ce sujet.

    Merci encore à tous pour votre temps précieux gâché pour ce faux problème.

    Cordialement-

  17. #17
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Citation Envoyé par Shennong Voir le message
    OMG j'ai enfin trouvé !!!!!!!!

    En fait, c'est une ... d'erreur de débutant. Le problème c'était que je rafraîchissais ma listbox entre chaque fichier supprimé ... du coup forcément il appréciait pas trop, vu que l'énumérateur changeait à chaque fois. J'ai simplement déplacé mon bloc d'instruction pour rafraîchir ma listbox en dehors de ma boucle et hop, ça fonctionne nickel ....
    Elément indiqué dés la première réponse, et précisé dans le code par le commentaire de la ligne 8
    Citation Envoyé par rv26t Voir le message
    Il suffit de parcourir la collection d'éléments sélectionnés (le tostring n'a rien à faire là, au passage il t'indique "System.Windows.Forms.ListBox+SelectedObjectCollection") et raffraichir la liste box à la fin de toutes les suppressions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For Each fichier In listbox.SelectedItems
      try
        My.Computer.FileSystem.DeleteFile(chemin_du_dossier & fichier)    ' efface le fichier
      Catch ex As Exception
        MessageBox.Show("Erreur lors de la suppression" & vbcrlf & vbcrlf & "Message :" ex.Message)
      End Try
    Next
    'Ici le code pour rafraîchir la listbox
    Citation Envoyé par Shennong Voir le message
    Je m'en veux purée, je suis désolé de vous avoir fait perdre votre temps avec une erreur aussi débile
    Bah, du moment que c'est résolu (tu peux passer en résolu)

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

Discussions similaires

  1. [XL-2007] Item sélectionné dans une listbox
    Par gds35 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/03/2010, 18h45
  2. Réponses: 4
    Dernier message: 21/12/2009, 14h02
  3. [Débutant] Probleme d'importation des données à partir des fichiers textes
    Par bahja29 dans le forum MATLAB
    Réponses: 3
    Dernier message: 12/03/2009, 17h28
  4. Réponses: 0
    Dernier message: 24/04/2008, 23h53
  5. Réponses: 3
    Dernier message: 13/09/2007, 19h11

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