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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé 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 : 41
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    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
    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
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  3. #3
    Membre Expert
    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
    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
    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.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  5. #5
    Membre Expert
    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
    Billets dans le blog
    7
    Par défaut
    @rv26t :

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

  6. #6
    Membre éclairé 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 : 41
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    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
    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
    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
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  8. #8
    Membre éclairé 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 : 41
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    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-

  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
    Par défaut
    Montre nous le code pour remplir la ListBox.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  10. #10
    Membre éclairé 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 : 41
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    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.

  11. #11
    Membre éclairé 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 : 41
    Localisation : France, Calvados (Basse Normandie)

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

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

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

    Cordialement-

+ 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, 17h45
  2. Réponses: 4
    Dernier message: 21/12/2009, 13h02
  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, 16h28
  4. Réponses: 0
    Dernier message: 24/04/2008, 22h53
  5. Réponses: 3
    Dernier message: 13/09/2007, 18h11

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