cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 2013
-
28 mars 2007 à 15:52
gregwillm -
24 juil. 2007 à 21:38
Salut, j'ai un problême avec le code ci-dessous:
Dim Dates As String
Dim i As Integer
For i = 0 To ListView1.Items.Count + 10
Dates = Dates & ListView1.Items(i).SubItems(0).Text & "|" & ListView1.Items(i).SubItems(1).Text & "|" & ListView1.Items(i).SubItems(2).Text & "|" & ListView1.Items(i).SubItems(3).Text & "|" & ListView1.Items(i).SubItems(4).Text & "|" & ListView1.Items(i).SubItems(5).Text & "|" & ListView1.Items(i).SubItems(6).Text & "|" & ListView1.Items(i).SubItems(7).Text & "|" & ListView1.Items(i).SubItems(8).Text & "|" & ListView1.Items(i).SubItems(9).Text & vbCrLf
Next i
FileOpen(1, path & "" & nom & "" & "\Gestion\sto.gcc", OpenMode.Binary)
FilePut(1, Dates)
FileClose(1)
Ce que j'ai mis en rouge, c'est ou j'ai le bugs, j'explique:
Je veux sauvegarder le contenu d'un ListView qui a 10 colonnes. Arrivé à la ligne en rouge, il me dit "InvalidArgument=La valeur '1' n'est pas valide pour 'index'"
Je voix pas trop ou est le bug dans cette ligne.
cs_fauve
Messages postés661Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 mars 20118 28 mars 2007 à 22:26
En faite ca vient du fait que les colonnes vides provoquent des erreurs avec le code que je t'ai proposé l'astuce serait que tu mettes un espace dans chaque colonne vide. Comme ca, on croit toujours qu'elles sont vides mais en réalité, non et mon code ne t'embêteras plus car elles auront un caractère
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 20132 28 mars 2007 à 16:23
Salut, merci, il ne dit plus qu'il y a des bugs mais aintenant, dans le fichier ou c'est enregistré, il ne me met que le contenu de la première colonne. C'est surment du fait qu'il ne fait qu'écrire le item 0, mais sinon, sa fait des bugs... pffffffff
Merci d'avance
Bye
ebaudoux@club.fr
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 20132 28 mars 2007 à 16:33
Tu veux dire que dans le for_next, pour l'item, mettre un for_next pour prendre le texte de chaque colonne?
Dit moi si c'est sa ou pas, pendant ce temps, je vais essayer sa.
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 28 mars 2007 à 16:35
Salut,
Voici un petit exemple pour une listview à 12 colonnes:
' on parcoure toutes les lignes
For I = 1 To ListView1.ListItems.Count
' On parcoure les colonnes (on sait qu'il y en a douze (moins la première)
For J = 1 To 11
' Verife
Msgbox ListView1.ListItems(I).SubItems(J)
Next J
Next I
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 20132 28 mars 2007 à 17:02
Euh, toujours le même bugs:
Dim dates As String
Dim i As Integer
Dim J As Integer
' on parcoure toutes les lignes
For i = 0 To ListView1.Items.Count
' On parcoure les colonnes (on sait qu'il y en a douze (moins la première)
For J = 0 To 9
' Verife
Dates = ListView1.Items(i).SubItems(J).Text & "|"
Next J
Next i
FileOpen(1, path & "" & nom & "" & "\Gestion\sto.gcc", OpenMode.Binary)
FilePut(1, Dates)
FileClose(1)
Dans le premier FOR, le ListItems, sa existait pas et à par se, toujours le même bugs
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 28 mars 2007 à 17:03
Salut,
J'ai un doute concernant le saut de ligne, mais essaye cela :
Dim Dates As String
Dim i As Integer
Dim j As interger
' Chemin fichier et ouverture
FileOpen(1, path & "" & nom & "" & "\Gestion\sto.gcc", OpenMode.Binary)
' on parcoure donc toutes les lignes
For i = 0 To ListView1.Items.Count
' On met dans Dates l'item de la première colonne
Dates = ListView1.ListItems(i).text & vbTab ' ici un espace
' on parcoure toutes les colonnes
For j = 1 to 9
' On rempli ta variable
Dates = Dates & ListView1.ListItems(i).SubItems(J) & vbTab 'ici un espace
Next j
' on ecrit dans le fichier dés qu'une ligne est terminées
FilePut(1, Dates) & VbNewLine ' Saut de ligne
cs_fauve
Messages postés661Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 mars 20118 28 mars 2007 à 20:59
Salut,
Essaies ceci pour enregistrer (PS : Ajouter Imports System.IO avant Public Class Form1) :
Dim SaveFileDialog1 As SaveFileDialog
Dim reponse As DialogResult
Dim Save_Listview As String = ""
SaveFileDialog1.InitialDirectory = My.Application.Info.DirectoryPath + "\" ' Définit le répertoire de démarrage
SaveFileDialog1.FileName = "" ' Permet de mettre une chaîne vide dans le nom du fichier (par défaut:SaveFileDialog)
SaveFileDialog1.Title = "Enregistrer une liste" ' Spéficie le titre de la boîte de dialogue SaveFileDialog1
SaveFileDialog1.Filter = "Fichiers dat|*.dat" ' Applique un filtre sur les fichiers présent dans le dossier
reponse = SaveFileDialog1.ShowDialog() ' Affiche SaveFileDialog1
If reponse = Windows.Forms.DialogResult.OK Then ' Test si l'utilisateur à cliqué sur Annuler
Dim SW As New StreamWriter(SaveFileDialog1.FileName) ' Ouvre le fichier spécifié dans SaveFileDialog1
For i = 0 To ListView1.Items.Count - 1 ' Boucle sur le nombre d'items dans la ListView
For j = 0 ListView1.Columns.Count - 1 ' Boucle sur le nombre de colonnes dans la ListView
Save_Listview = Save_Listview & ListView1.Items(i).SubItems(j).Text & "|"
' Sauvegarde d'un item dans la ListView
Next j
SW.WriteLine(Save_Listview) ' Ecrit dans le fichier le contenu de la variable Save_Listview
Save_Listview = "" ' Remplacement du contenu de Save_Listview par une chaîne vide
Next i
SW.Close() ' Fermeture du fichier
End If
, ----
Dim OpenFileDialog1 As OpenFileDialog
Dim reponse As DialogResult
OpenFileDialog1.InitialDirectory = My.Application.Info.DirectoryPath + "\"
' Définit le répertoire à afficher lors de l'affichage de OpenFileDialog1
OpenFileDialog1.FileName = "" ' Effacement de la zone Nom du fichier (par défaut : il est écrit OpenFileDialog)
OpenFileDialog1.Title = "Ouvrir une liste" ' Spécifie le nom de la boîte de dialogue OpenFileDialog1
OpenFileDialog1.Filter = "Fichiers dat|*.dat" ' Spécifie les fichiers qui seront autorisés à apparaître
reponse = OpenFileDialog1.ShowDialog() ' Affiche OpenFileDialog
If reponse = Windows.Forms.DialogResult.OK Then ' Détecte si l'utilisateur à cliqué sur Annuler
Dim str As New StreamReader(OpenFileDialog1.FileName) ' Ouverture du fichier spécifié par OpenFileDialog1
str.ReadLine()
Do Until str.Peek = -1 ' Permet la lecture du fichier jusqu'à la fin de celui-ci
val = str.ReadLine.Split("|") ' Permet de lire un champs délimité par |
lvItem = Browsers(TabControl1.SelectedIndex).Items.Add(val(0)) ' Ajout du premier SubItem d'un Item
For i = 1 To val.Length - 1
lvItem.SubItems.Add(val(i)) ' Ajout des autres SubItems du Item
Next i
Loop
str.Close() ' Fermeture du fichier
End If, ----
(Coloration syntaxique automatique par Kenji)
------------------------------------------------------------------------------------------------------
N'oublies pas d'accepter si ce message a réglé ton problème
cs_fauve
Messages postés661Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 mars 20118 28 mars 2007 à 21:06
Salut,
Il y a une petite erreur dans le code pour charger la listview, voici la correction :
Dim OpenFileDialog1 As OpenFileDialog
Dim reponse As DialogResult
OpenFileDialog1.InitialDirectory = My.Application.Info.DirectoryPath + "\"
' Définit le répertoire à afficher lors de l'affichage de OpenFileDialog1
OpenFileDialog1.FileName = "" ' Effacement de la zone Nom du fichier (par défaut : il est écrit OpenFileDialog)
OpenFileDialog1.Title = "Ouvrir une liste" ' Spécifie le nom de la boîte de dialogue OpenFileDialog1
OpenFileDialog1.Filter = "Fichiers dat|*.dat" ' Spécifie les fichiers qui seront autorisés à apparaître
reponse = OpenFileDialog1.ShowDialog() ' Affiche OpenFileDialog
If reponse = Windows.Forms.DialogResult.OK Then ' Détecte si l'utilisateur à cliqué sur Annuler
Dim str As New StreamReader(OpenFileDialog1.FileName) ' Ouverture du fichier spécifié par OpenFileDialog1
str.ReadLine()
Do Until str.Peek = -1 ' Permet la lecture du fichier jusqu'à la fin de celui-ci
val = str.ReadLine.Split("|") ' Permet de lire un champs délimité par |
lvItem = ListView1.Items.Add(val(0)) ' Ajout du premier SubItem d'un Item
For i = 1 To val.Length - 1
lvItem.SubItems.Add(val(i)) ' Ajout des autres SubItems du Item
Next i
Loop
str.Close() ' Fermeture du fichier
End If, ----
(Coloration syntaxique automatique par Kenji)
L'erreur venait que je gérais un TabControl avec des ListView ancrés dans chaque TabPage et j'ai donc du créer une collection de ListView
@+
------------------------------------------------------------------------------------------------------
N'oublies pas d'accepter si ce message a réglé ton problème
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 20132 28 mars 2007 à 21:30
Ouinnnnnnnnn, ton code est bon, mais comme depuis le début, toujour le même bug!!! Je vous redécris l'erreur:à la ligne "Save_Listview Save_Listview & ListView1.Items(i).SubItems(j).Text & "|"", il me dit le message suivant: InvelidArgument la valeur 1 n'est pas valide pour 'index'
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 20132 28 mars 2007 à 22:27
Parfait, sa fonctionne à présent. Euh, j'imagine que si la colonne est vide, lorsque je vais sauvegarder le listview, mettre un espace en guise de texte peut éviter les bugs? Sinon, s'il y a un autre moyen...
cs_fauve
Messages postés661Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 mars 20118 28 mars 2007 à 22:37
oui, j'ai trouvé un autre moyen, plus besoin d'ajouter un espace dans les colonnes vides mon code le prends en charge. En effet, j'ai rajouté la fonction Try ... Catch (elle permet de traiter une erreur qui pourrait se produire lors de l'execution du programme).
Ici, quand mon code accédé à une colonne vide il te rends comme exception : ArgumentOutOfRangeException
J'ai attrapé cette erreur avec le Catch et au lieu de tenter de sauvegarder le contenu de la colonne je rajoute directement un espace dans Save_Listview
Entre Try et Catch, on met le code qu'on veut surveiller
Catch permet de traiter une erreur si elle se produit(ici ArgumentOutOfRangeException) et permet de traiter nous même cette erreur
Voici le code :
Dim SaveFileDialog1 As New SaveFileDialog
Dim reponse As DialogResult
Dim Save_Listview As String = ""
SaveFileDialog1.InitialDirectory = My.Application.Info.DirectoryPath + "\" ' Définit le répertoire de démarrage
SaveFileDialog1.FileName = "" ' Permet de mettre une chaîne vide dans le nom du fichier (par défaut:SaveFileDialog)
SaveFileDialog1.Title = "Enregistrer une liste" ' Spéficie le titre de la boîte de dialogue SaveFileDialog1
SaveFileDialog1.Filter = "Fichiers dat|*.dat" ' Applique un filtre sur les fichiers présent dans le dossier
reponse = SaveFileDialog1.ShowDialog() ' Affiche SaveFileDialog1
If reponse = Windows.Forms.DialogResult.OK Then ' Test si l'utilisateur à cliqué sur Annuler
Dim SW As New IO.StreamWriter(SaveFileDialog1.FileName) ' Ouvre le fichier spécifié dans SaveFileDialog1
For i = 0 To ListView1.Items.Count - 1 ' Boucle sur le nombre d'items dans la ListView
For j = 0 To ListView1.Columns.Count - 1 ' Boucle sur le nombre de colonnes dans la ListView
Try
Save_Listview = Save_Listview & ListView1.Items(i).SubItems(j).Text & "|"
' Sauvegarde d'un item dans la ListView
Catch ex As ArgumentOutOfRangeException
Save_Listview = Save_Listview & " |"
End Try
Next j
SW.WriteLine(Save_Listview) ' Ecrit dans le fichier le contenu de la variable Save_Listview
Save_Listview = "" ' Remplacement du contenu de Save_Listview par une chaîne vide
Next i
SW.Close() ' Fermeture du fichier
End If, ----