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
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à ?
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
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 ?
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
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.
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.