Selection et suppresion d'objet dans une ListBox

Ezreal - 23 janv. 2013 à 11:07
 Ezreal - 23 janv. 2013 à 11:57
Bonjour à tous,

Je suis débutant en VB et je souhaiterais faire un petit programme permettant de copier des fichiers vers un autre répertoire, l'intérêt est moindre mais devrais me permettre d'apprendre quelques notions.

Je bloque sur cette étape :

J'ai une listbox qui m'affiche le chemin\NomFichier d'un ou plusieurs fichiers préalablement sélectionné dans un OpenFileDialog et une seconde listbox qui ne m'affiche que les noms de fichiers + la taille (en octects, ko, mo etc)
J'ai un bouton qui me permet, en sélectionnant un ou plusieurs fichiers de la première listbox, de les supprimer dans cette première listbox et qui devrais supprimer les lignes correspondante dans la seconde listbox.

Le problème est que dans la seconde listbox, uniquement le dernier fichier ajouté est supprimé. Je dois avoir un problème dans une variable qui ne récupère pas le bon nom de fichier ou autre, mais je n'arrive pas à mettre le doigt dessus ...

Si vous avez des pistes à me donner je suis preneur !

Voici la partie qui me pose problème :

  Private Sub btn_supp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_supp.Click
        'Bouton Supprimer
        'Supprime de la ListBox lb_files le ou les fichiers sélectionnés
        If Not Me.lb_files.SelectedItem Is Nothing Then
            For Each Items In lb_files.SelectedItem
                KoMoGo()
                Me.lb_files.Items.Remove(Me.lb_files.SelectedItem)

                ' Supprime de la ListBox lb_taille le ou les fichiers sélectionnés
                ' !!!!!! Ne supprime que le dernier fichier ajouté !!!!!
                Dim File As String = System.IO.Path.GetFileName(FileNames)
                MsgBox(File)
                Me.lb_taille.Items.Remove(File & " " & OctetsToKoMoGo)
            Next
        Else
            MsgBox("Selectionnez au moins un fichier à supprimer")
        End If
    End Sub



Voici le code complet (Attention ça risque de faire peur, je débute !) :

Code Visual Basic :
Imports System.Math
Public Class filearchiver

    Public dlg_Open As OpenFileDialog, dlg_Destination As New FolderBrowserDialog, Path As String, FileNames As String, Taille As String, TB, File, OctetsToKoMoGo

    Private Sub btn_ajouter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_ajouter.Click
        Dim Addition As Integer = 0
        'Bouton Ajouter
        'Propriétés de OpenFileDialog : dlg_Open
        dlg_Open = New OpenFileDialog()
        dlg_Open.InitialDirectory = "C:"

        dlg_Open.Title = "Selection du fichier à archiver"
        dlg_Open.Filter = "Tous|*.*|Images|*.bmp;*.gif;*.jpg;*.png|PDF|*.pdf|Texte|*.txt|Excel|*.xls;*.xlsx|Word|*.doc;*.docx"
        dlg_Open.DefaultExt = "Tous"
        dlg_Open.AddExtension = True
        dlg_Open.CheckFileExists = False
        dlg_Open.Multiselect = True
        dlg_Open.ShowDialog()

        'Ajoute le chemin des fichiers sélectionnez dans la ListBox : lb_files
        'Ajoute le nom du fichier et sa taille dans la ListBox : lb_taille
        For Each Me.FileNames In dlg_Open.FileNames
            lb_files.Items.Add(FileNames)
            Taille = FileLen(FileNames)
            KoMoGo()
            Dim File As String = System.IO.Path.GetFileName(FileNames)
            lb_taille.Items.Add(File & " " & OctetsToKoMoGo)

            'Ajout de la taille totale des fichiers sélectionné dans le label : lbl_total
            ' !!!!!! Option a corriger, ne prend pas en compte l'ajout de nouveaux fichiers !!!!!!
            Addition += Taille
            lbl_total.Text = Addition
        Next


    End Sub

    Private Sub btn_supp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_supp.Click
        'Bouton Supprimer
        'Supprime de la ListBox lb_files le ou les fichiers sélectionnés
        If Not Me.lb_files.SelectedItem Is Nothing Then
            For Each Items In lb_files.SelectedItem
                KoMoGo()
                Me.lb_files.Items.Remove(Me.lb_files.SelectedItem)
                ' Supprime de la ListBox lb_taille le ou les fichiers sélectionnés
                ' !!!!!! Option a corriger, ne supprime que le dernier fichier ajouté !!!!!
                Dim File As String = System.IO.Path.GetFileName(FileNames)
                Me.lb_taille.Items.Remove(File & " " & OctetsToKoMoGo)
            Next
        Else
            MsgBox("Selectionnez au moins un fichier à supprimer")
        End If
    End Sub

    Private Sub btn_destination_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_destination.Click
        'Bouton Destination
        'Permet de sélectionner le répertoire de destination ou seront archivé/sauvegardé les fichiers sélectionnez plus haut
        tb_destination.Text = ""
        dlg_Destination.RootFolder = Environment.SpecialFolder.Desktop
        dlg_Destination.ShowDialog()
        'Ajoute le chemin de destination dans la TextBox tb_destination
        tb_destination.AppendText(dlg_Destination.SelectedPath)
        Path = dlg_Destination.SelectedPath
    End Sub

    Private Sub btn_archiver_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_archiver.Click

        If Not Me.FileNames Is Nothing Then
            'Si au moins un fichier est sélectionné
            If Not Me.Path Is Nothing Then
                'Si un répertoire de destination est indiqué
                For Each Me.FileNames In lb_files.Items
                    Dim File As String = System.IO.Path.GetFileName(FileNames)
                    'Pour chaque FileNames sélectionnés dans dlg_Open, on va retirer le chemin et ne garder que le nom et l'extension du fichier
                    'Copie le fichier avec son chemin vers le chemin sélectionné dans dlg_Destination \ "Nom du fichier" - sans le chemin
                    If System.IO.File.Exists(Path & "" & File) Then

                        'Si le fichier existe déjà dans le répertoire d'archivage, passe au fichier suivant
                        MsgBox("Le fichier " & File & " existe déjà.")
                        On Error Resume Next
                    Else
                        'Si le fichier n'est pas encore présent dans le répertoire d'archivage, procède à la copie
                        System.IO.File.Copy(FileNames, Path & "" & File)

                    End If
                Next

            MsgBox("Archivage terminé.")

        Else
            'Si aucun répertoire de destination n'est sélectionné, affiche ce message
            MsgBox("Merci de sélectionner un répertoire de destination.")
        End If
        Else
        'Si aucune fichier n'est sélectionné, affiche ce message
        MsgBox("Merci de sélectionner au moins un fichier à archiver.")
        End If

    End Sub

    Sub KoMoGo()
        'Fonction permettant de convertir la taille des fichiers (octets) en Ko, Mo ou Go
        If Taille < 1024 Then ' - d'1 Ko
            OctetsToKoMoGo = Taille & " Octets"

        ElseIf Taille >= 1024 And Taille < 1048576 Then ' Entre 1 Ko et 1023Ko
            OctetsToKoMoGo = Round((Taille / 1024), 2) & " Ko"

        ElseIf Taille >= 1048576 And Taille < 1073741824 Then 'Entre 1 Mo et 1023 Mo
            OctetsToKoMoGo = Round((Taille / 1048576), 2) & " Mo"

        ElseIf Taille >= 1073741824 And Taille < 1099511627776 Then 'Entre 1 Go et 1023 Go
            OctetsToKoMoGo = Round((Taille / 1073741824), 2) & " Go"
        End If
    End Sub
End Class



Et voila à quoi ressemble le Form
http://img15.hostingpics.net/pics/64446837fa.png

2 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
23 janv. 2013 à 11:51
Salut

bizarre c'est en double

ici
0
Oui je sais.
Ne pouvant éditer le sujet et après avoir été rabroué (et justement) par un administrateur pour avoir ouvert un sujet comportant deux questions, une des questions ayant trouvées une réponse, je viens poser ma deuxième question dans un second sujet.
0
Rejoignez-nous