Problème rafraichissement listview

Résolu
JUANABIBI Messages postés 40 Date d'inscription mardi 17 mars 2020 Statut Membre Dernière intervention 10 avril 2020 - 9 avril 2020 à 10:10
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 - 10 avril 2020 à 17:33
Salut à tous,

Je fais une listview que j'alimente avec une boucle for each.

J'ai un bouton qui me permet de dupliquer un élément de cette listview.

Je duplique, tout va bien, mais quand je vais ensuite rafraichir la listview, tout disparait et rien ne s'affiche.

Je vous montre mon code, j'ai essayé de le détailler au mieux :

 If Me.ListView1.FocusedItem IsNot Nothing Then

            Dim appPath As String = Application.StartupPath() & "\SVG"
            Dim Fichiers_SVG = My.Computer.FileSystem.GetFiles(appPath, FileIO.SearchOption.SearchTopLevelOnly, "*.cas")
            Dim Fichier_A_Copier As String = Me.ListView1.SelectedItems.Item(0).Text
            Dim Nom_Fichier As String

            'Séparation de l'extension
            Dim sep() As Char = "."
            Nom_Fichier = (Fichier_A_Copier).Split(sep).First

            'Définition du fichier dupliqué
            Dim Fichier_Duplique As String = appPath & "\" & Nom_Fichier & "_Copie.cas"

            'Copie du fichier
            IO.File.Copy(appPath & "\" & Fichier_A_Copier, Fichier_Duplique)

            'Ouverture du chemin pour contrôle
            Process.Start(appPath)

            'Nettoyage de la liste
            ListView1.Clear()

            'Pour chaque fichier contenu dans le dossier SVG, le mettre dans la listview avec la date de creation et la premiere ligne
            For Each fichier As String In Fichiers_SVG

                With ListView1

                    Dim Element As New ListViewItem
                    Dim FichierInfo As FileInfo = New FileInfo(fichier)
                    Dim Date_creation As Date = FichierInfo.CreationTime.Date

                    'Récupération de la première ligne du fichier
                    Dim STR As New StreamReader(fichier)
                    Dim PremiereLigne As String
                    PremiereLigne = STR.ReadLine

                    'Construction de la ligne dans le listview
                    Element.Text = Dir(fichier)
                    Element.SubItems.Add(Date_creation)
                    Element.SubItems.Add(PremiereLigne)

                    'On envoie les données dans le listview
                    .Items.Add(Element)

                End With

            Next

        End If


Auriez-vous une idée ?

Merci.

18 réponses

vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié le 10 avril 2020 à 00:21
Bonjour
Pour le nom de fichier sans l'extension utilises ceci
Dim Nom_Fichier as String = System.IO.Path.GetFileNameWithoutExtension(Fichier_A_Copier)


Pour ta boucle For Each fais ainsi
For Each fichier As String In Fichiers_SVG
       Dim FichierInfo As FileInfo = New FileInfo(fichier)
        Dim Date_Creation As Date = FichierInfo.CreationTime.Date
        ' on crée le StreamReader pour lire la première ligne du fichier
        Dim STR As New StreamReader(fichier)
        ' on crée l'item de la listview et on l'ajoute
        ListView1.Items.Add(New ListViewItem(New  String() {Dir(fichier), Date_Creation.ToString, STR.ReadLine}))
        ' on ferme le StreamReader
        STR.Close()
Next



Par contre j'ai un doute sur le
Dir(fichier)

C'est du VB 6 et je ne vois pas son utilité ;
C'est le nom du fichier complet que tu veux là ?

1
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
10 avril 2020 à 10:14
Bonjour
en regardant les propriétés de ta listview est-elle en mode Detail pour la propriétés View ?

1
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
10 avril 2020 à 10:19
Et dans le paramètre Columns as-tu bien tes 3 colonnes ?
Car je n'en vois aucune sur l'image que tu as mise ?
1
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié le 10 avril 2020 à 10:34
De ce côté là tout est bon !
As -tu mis la propriété FullRowSelect à True pour ta Listview
A quoi sert cette ligne avec le If ?
If Me.ListView1.FocusedItem IsNot Nothing Then

Vérifie en pas à pas si tu rentres bien dans la condition IF et que le code dans cette condition s'exécute .
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
10 avril 2020 à 10:43
Pour tester si l'utilisateur a bien sélectionné une ligne de la listview utilises l'évènement Click de la ListView
un exemple ici
Private Sub Listfich_Click(sender As Object, e As EventArgs) Handles Listfich.Click

        Dim LigneSelectionnee as Integerl = Listfich.SelectedIndices(0)
        
End Sub

Tu peux récupérer le n° de ligne sélectionnée
1
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
10 avril 2020 à 12:33
Changer la vue ne solutionnera point ton problème
Pose un point d' arrêt sur la ligne
For Each fichier As String In Fichiers_SVG
et regarde si Fichiers_SVG contient quelque chose .
Tu dis : Ok, je viens de squeezer tous les IF, cela ne fonctionne toujours pas
Cela veut dire quoi ?
1
JUANABIBI Messages postés 40 Date d'inscription mardi 17 mars 2020 Statut Membre Dernière intervention 10 avril 2020
10 avril 2020 à 14:34
J'ai enlevé tous les IF, désolé je reprends, je te tiens au courant
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié le 10 avril 2020 à 17:11
Rebonjour
Je n'avais pas fait attention :
Listview1.Clear()
efface toutes les propriétés de la Listview alorsd que
Listview1.Items.Clear()
ne fait qu'effacer les items de la listview ( soit son contenu )
Si je comprends bien c'est le
Fichier_Duplique
qui te manque : logique car
Fichiers_SVG
ne le contient pas au départ .

Quelques conseils :
Clicque dans les propriétés du projet ( voir menu projet ) et dans la nouvelle interface qui s'affiche va dans Compiler .
Là tu mets Option Strict et Option Explicit sur On ( cela t'obligera à déclarer toutes tes variables avec une clause As ) .
Ensuite tu vas dans dans References . Dans la liste en bas tu décoches Microsoft Visual Basic : tu feras ainsi du vrai VB Net sans y mettre des instructions VB6 ( Microsoft les a laissé par souci de compatibilité et pour ne pas perdre les développeurs VB 6 : si on fait du VB Net autant le faire à fond )
Ces conseils sont valables pour tous projets en VB Net

Ensuite un excellent cours VB Net pour les bases : https://plasserre.developpez.com/cours/vb-net


1
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
10 avril 2020 à 17:23
Le fichier dupliqué est facile à rajouté :
Juste avant la boucle
For Each
tu mets
Fichiers_SVG = My.Computer.FileSystem.GetFiles(appPath, FileIO.SearchOption.SearchTopLevelOnly, "*.cas")

Par contre ton fichier dupliqué n'a pas d'extension .cas : il faut modifié une ligne ainsi
'Copie du fichier
IO.File.Copy(appPath & "\" & Fichier_A_Copier, Fichier_Duplique & ".cas")

1
JUANABIBI Messages postés 40 Date d'inscription mardi 17 mars 2020 Statut Membre Dernière intervention 10 avril 2020
10 avril 2020 à 09:56
Bonjour et merci beaucoup,

Alors, j'ai essayé le code que tu as mis, qui est beaucoup plus propre que ce que j'avais fait.

Maintenant, j'ai toujours la même erreur.

Regarde :


Je ne sais pas pourquoi les colonnes disparaissent ...

Concernant le Dir(fichier), cela me permet de prendre uniquement le fichier avec l'extension, et c'est fonctionnel avec vb.net.

Je continue à chercher ;)
0
JUANABIBI Messages postés 40 Date d'inscription mardi 17 mars 2020 Statut Membre Dernière intervention 10 avril 2020
10 avril 2020 à 10:16
Merci,

Effectivement, j'ai ce paramètre.
0
JUANABIBI Messages postés 40 Date d'inscription mardi 17 mars 2020 Statut Membre Dernière intervention 10 avril 2020
10 avril 2020 à 10:21
Merci !

Voici une capture peut-être plus explicite :

0
JUANABIBI Messages postés 40 Date d'inscription mardi 17 mars 2020 Statut Membre Dernière intervention 10 avril 2020
10 avril 2020 à 10:36
Cette ligne me permet de valider si l'utilisateur a bien sélectionné une ligne dans le Listview.
Je vais essayer de désactiver les IF en amont pour voir s'il y a pas un problème.
0
JUANABIBI Messages postés 40 Date d'inscription mardi 17 mars 2020 Statut Membre Dernière intervention 10 avril 2020
10 avril 2020 à 10:53
Ok, je viens de squeezer tous les IF, cela ne fonctionne toujours pas.
J'ai essayé de changer la vue, en passant en LargeIcons, les icônes restent, mais rien ne s'actualise.

J'aime bien l'idée du SelectedIndices, je me penche là dessus.
0
JUANABIBI Messages postés 40 Date d'inscription mardi 17 mars 2020 Statut Membre Dernière intervention 10 avril 2020
10 avril 2020 à 14:45
Alors, j'ai tout désactivé jusqu'à la boucle et rien n'y fait; je pense que mon problème vient du Listview, je repars avec un vierge pour voir.
0
JUANABIBI Messages postés 40 Date d'inscription mardi 17 mars 2020 Statut Membre Dernière intervention 10 avril 2020
Modifié le 10 avril 2020 à 15:18
Bon, il y a du nouveau, j'ai creusé un peu dans les options de la ListView, puisque lorsque j'en créais une nouvelle, il n'y a rien qui changeait.

J'ai pu arriver à garder les colonnes et le contenu initial en faisant :

'Nettoyage de la liste
ListView1.Items.Clear()


En lieu et place de :

'Nettoyage de la liste
ListView1.Clear()


Maintenant, je n'ai toujours pas la dernière ligne qui s'affiche ...
0
JUANABIBI Messages postés 40 Date d'inscription mardi 17 mars 2020 Statut Membre Dernière intervention 10 avril 2020
10 avril 2020 à 17:11
OK, donc je comprends bien, je suis obligé de l'ajouter à la liste initiale.
Je cherche ;) Merci !
0
JUANABIBI Messages postés 40 Date d'inscription mardi 17 mars 2020 Statut Membre Dernière intervention 10 avril 2020
10 avril 2020 à 17:31
J'y étais presque, je me suis embarqué trop loin pour faire un code clair je pense.
Je n'ai pas rajouté l'extension, cela me faisait un doublon.

Merci beaucoup pour ton aide !
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
10 avril 2020 à 17:33
De rien !
0
Rejoignez-nous