Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 2018
-
Modifié par Karin.code le 9/12/2016 à 19:04
vb95
Messages postés3416Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023
-
11 déc. 2016 à 01:04
Bonsoir,
Je veux enregistrer les données Ajouter dans une ListView dans l'application en utilisant My.settings
j'ai pu trouver le code utiliser pour la TexteBox et la ListBox
Pour la listeBox on a besoin de :
une ListBox
Une TexteBox
Deux Bouton Ajouter une variable dans les propriétés du Projet -> Paramètres -> Nom : ListView1 et Type : System.Collections.ArrayList On ajoute le code suivant :
Dim list As New ArrayList() 'Remplir la ListBox Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click list.Add(TextBox1.Text) TextBox1.Clear() TextBox1.Focus() ListBox1.DataSource = list.ToArray().ToList() End Sub 'Enregistrer les Données dans la Source Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click My.Settings.ListBox1 = list My.Settings.Save() End Sub
Pour la TextBox on a besoin de :
Sans Code :
Une TexteBox Dans la propriété de La TexteBox -> (ApplicationSettings) -> (PropertyBinding) -> Text -> Nouveau -> Name : Par exemple "Save" Avec Code :
Une TexteBox Deux Boutons Ajouter une variable dans les propriétés du Projet -> Paramètres -> Nom : Saves et Type : String Ajouter le code Suivant :
'Bouton Sauvgarder les données Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click My.Settings.Saves = TextBox1.Text My.Settings.Save() End Sub 'Bouton Afficher les données sauvgarder Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox1.Text = My.Settings.Saves End Sub
Mais j'ai beau chercher je ne trouve rien concernant la ListView
j'ai trouvé beaucoup de poste concernant ce Sujet, mais soit qu'il y a pas de solution, soit une solution qui ne me convient pas
Remarque : je veux éviter d'enregistrer les données dans un document texte ( je connais cette méthode)
je vous remercie d'avance pour votre aide
c'est dans un fichier texte, je cherche si je n'ai pas autre chose dans mes archives
@+ Le Pivert
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 20182 9 déc. 2016 à 20:30
Bonsoir cs_Le Pivert,
Merci
C'est une bonne méthode je vais l'utiliser pour l'instant, si tu trouve quelque chose sur ce que j'ai mentionné plus haut tiens moi au courant s'il te plait
cs_Le Pivert
Messages postés7899Date d'inscriptionjeudi 13 septembre 2007StatutContributeurDernière intervention21 septembre 2023137
>
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 2018 10 déc. 2016 à 13:42
Ajouter une variable dans les propriétés du Projet -> Paramètres -> Nom : malistview et Type : String
Ajouter le code Suivant :
'http://www.developpez.net/forums/d952917-2/dotnet/langages/vb-net/sauvegarder-valeurs-d-listview-my-settings/
'enrgistrer listview
Private Sub Savelistview()
'Déclare la chaîne temporaire qui servira à enregistrer le contenu du tableau
Dim tmpContenu As String = ""
'On va maintenant construire la même chose qu'un fichier .csv :
' - Chaque ligne est séparée par le caractère VbLf
' -Les données de chaque ligne sont séparées par le caractère ";"
'Prend chacune des lignes de la ListView
For Each I As ListViewItem In ListView1.Items
'Prend chaque sous-élément de l'item actuel
For Each SI As ListViewItem.ListViewSubItem In I.SubItems
'Ajoute la valeur du subitem à la string représentant le tableau (avec le ";" pour séparer les valeurs)
tmpContenu = tmpContenu & SI.Text & ";"
Next
'Ajoute le caractère VbLf à la string représentant le tableau
tmpContenu = tmpContenu & vbLf
Next
'Retire de la chaîne de la String le ";" excédentaire de chaque ligne
tmpContenu = tmpContenu.Replace(";" & vbLf, vbLf)
'Enregistre maintenant cette String dans tes settings
My.Settings("malistview") = tmpContenu
End Sub
Private Sub Loadlistview()
Dim tmpContenu As String
Dim Lignes As String()
Dim Cells As String()
Dim incr As Integer
Dim Items As ListViewItem()
'Récupère le tableau dans les settings
tmpContenu = CStr(My.Settings("malistview"))
'Divise la String en autant de lignes qu'il y en a (séparées par les VbLf)
'Attention , comme dans la construction le dernier caractère est VbLf on va se retrouver avec une ligne en trop dont il ne faudra pas tenir compte
Lignes = Split(tmpContenu, vbLf)
'Indique le nombre d'items que l'on va ajouter à la ListView
ReDim Items(Lignes.GetUpperBound(0) - 1) '-1 car il y a une ligne vide en trop dans le fichier
'Ajoute chaque ligne dans le tableau de données
For incr = 0 To Lignes.GetUpperBound(0) - 1
'Divise la ligne en autant de données qu'elle en contient (séparées par des ";")
Cells = Split(Lignes(incr), ";")
'Ajoute la ligne à la liste des lignes à ajouter
Items(incr) = New ListViewItem(Cells)
Next
'Ajoute l'ensemble des lignes à la ListView
ListView1.Items.AddRange(Items)
End Sub
mettre dans un Form
1 listview nommée : ListView1
1 button nommé: cmdopen
1 label nommé: lblfile
Ajouter une variable dans les propriétés du Projet -> Paramètres -> Nom : malistview et Type : String
Ajouter le code Suivant :
Option Strict On
Imports System.IO
Imports System.Text.RegularExpressions
Public Class Form1
Dim chemin As String
Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Savelistview()
End Sub
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Loadlistview()
End Sub
Private Sub cmdopen_Click(sender As System.Object, e As System.EventArgs) Handles cmdopen.Click
'boite dialogue de choix dossier source
Dim opendir As New FolderBrowserDialog
With opendir
.SelectedPath = chemin
.ShowNewFolderButton = True
If .ShowDialog = Windows.Forms.DialogResult.OK Then
chemin = "" & .SelectedPath 'chemin du fichier source
Me.ListView1.Columns.Clear()
Me.ListView1.Items.Clear()
comparefile()
Else
MessageBox.Show("Opération annulée par l'utilisateur!", "Ouverture dossier", MessageBoxButtons.OK, MessageBoxIcon.Information)
Exit Sub
End If
.Dispose()
End With
End Sub
'http://www.developpez.net/forums/d952917-2/dotnet/langages/vb-net/sauvegarder-valeurs-d-listview-my-settings/
Private Sub Savelistview()
'Déclare la chaîne temporaire qui servira à enregistrer le contenu du tableau
Dim tmpContenu As String = ""
'On va maintenant construire la même chose qu'un fichier .csv :
' - Chaque ligne est séparée par le caractère VbLf
' -Les données de chaque ligne sont séparées par le caractère ";"
'Prend chacune des lignes de la ListView
For Each I As ListViewItem In ListView1.Items
'Prend chaque sous-élément de l'item actuel
For Each SI As ListViewItem.ListViewSubItem In I.SubItems
'Ajoute la valeur du subitem à la string représentant le tableau (avec le ";" pour séparer les valeurs)
tmpContenu = tmpContenu & SI.Text & ";"
Next
'Ajoute le caractère VbLf à la string représentant le tableau
tmpContenu = tmpContenu & Environment.NewLine
Next
'Retire de la chaîne de la String le ";" excédentaire de chaque ligne
tmpContenu = tmpContenu.Replace(";" & Environment.NewLine, Environment.NewLine)
'Enregistre maintenant cette String dans tes settings
My.Settings("malistview") = tmpContenu
End Sub
Private Sub Loadlistview()
Dim tmpContenu As String
Dim Lignes As String()
Dim Cells As String()
Dim incr As Integer
Dim Items As ListViewItem()
With Me.ListView1
.View = View.Details
.GridLines = True
.FullRowSelect = True
.CheckBoxes = True 'affiche les cases à cocher
.Columns.Add("Fichiers", 150, HorizontalAlignment.Left)
.Columns.Add("Date création", 120, HorizontalAlignment.Left)
.Columns.Add("Dernière Modification", 120, HorizontalAlignment.Left)
End With
'Récupère le tableau dans les settings
tmpContenu = CStr(My.Settings("malistview"))
'Divise la String en autant de lignes qu'il y en a (séparées par les VbLf)
'Attention , comme dans la construction le dernier caractère est VbLf on va se retrouver avec une ligne en trop dont il ne faudra pas tenir compte
Lignes = Regex.Split(tmpContenu, Environment.NewLine)
'Indique le nombre d'items que l'on va ajouter à la ListView
ReDim Items(Lignes.GetUpperBound(0) - 1) '-1 car il y a une ligne vide en trop dans le fichier
'Ajoute chaque ligne dans le tableau de données
For incr = 0 To Lignes.GetUpperBound(0) - 1
'Divise la ligne en autant de données qu'elle en contient (séparées par des ";")
Cells = Regex.Split(Lignes(incr), ";")
'Ajoute la ligne à la liste des lignes à ajouter
Items(incr) = New ListViewItem(Cells)
Next
'Ajoute l'ensemble des lignes à la ListView
ListView1.Items.AddRange(Items)
lblfile.Text = CStr(ListView1.Items.Count) & " fichiers"
End Sub
'Fichiers
Private Sub comparefile()
Try
'get file infos
Dim d1 As New DirectoryInfo(chemin)
Dim aInfos() As FileInfo = d1.GetFiles
Dim i As Integer
With Me.ListView1
.View = View.Details
.GridLines = True
.FullRowSelect = True
.CheckBoxes = True 'affiche les cases à cocher
.Columns.Add("Fichiers", 150, HorizontalAlignment.Left)
.Columns.Add("Date création", 120, HorizontalAlignment.Left)
.Columns.Add("Dernière Modification", 120, HorizontalAlignment.Left)
End With
'ListView
For Each info As FileInfo In aInfos
i = i + 1
Dim lvi As New ListViewItem(info.Name)
With lvi
.Name = info.Name
.SubItems.Add(info.CreationTime.ToString)
.SubItems.Add(info.LastWriteTime.ToString)
.Tag = info
End With
Me.ListView1.Items.Add(lvi)
lblfile.Text = CStr(ListView1.Items.Count) & " fichiers"
Next
Catch
End Try
End Sub
End Class
Bonne programmation
@+ Le Pivert
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 20182
>
cs_Le Pivert
Messages postés7899Date d'inscriptionjeudi 13 septembre 2007StatutContributeurDernière intervention21 septembre 2023 10 déc. 2016 à 17:55
Bonsoir cs_Le Pivert,
Merci beaucoup c'est exactement ce que j'ai voulu
et c'est beaucoup mieux que la méthode a laquelle j'ai pensé, je voulais mettre deux ListBox (j'ai deux colonne dans la ListView) et utiliser le code que j'ai posté plus haut, au démarrage de la Form les données seront rempli dans les deux ListBox après importer les données de deux ListBox vers la ListeView
juste une chose, la ListView est dans la Form2 et je veux utiliser les données enregistrées dans la ListView dès le démarrage de la Form1, je sais que pour utiliser un variable dans plusieurs Form On remplace "Dim" par "Public", alors je dois faire comme suite :
Public tmpContenu As String = "" Public Lignes As String() Public Cells As String() Public incr As Integer Public Items As ListViewItem()
je place
Private Sub Loadlistview
et
Private Sub Savelistview
dans la Form1
et je met :
dans la Form1 :
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Loadlistview() End Sub
dans la form2 :
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Loadlistview() End Sub Private Sub Form2_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing Savelistview() End Sub
cela devrait remplir la ListView qui est dans la Form2 dès le démarrage de la Form1 pour pouvoir utiliser les données et à chaque fois que j'ouvre la Form2 la LlistView sera rempli avec les nouvelles données et à la fermeture de la Form2 les données seront enregistrés
est-ce que je dois aussi faire ça?
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing Savelistview() End Sub
cs_Le Pivert
Messages postés7899Date d'inscriptionjeudi 13 septembre 2007StatutContributeurDernière intervention21 septembre 2023137
>
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 2018 10 déc. 2016 à 18:19
Il faut tout revoir:
Mettre ceci dans un module:
Option Strict On
Imports System.Text.RegularExpressions
Module Module1
Public Sub Savelistview(ByVal list As ListView)
'Déclare la chaîne temporaire qui servira à enregistrer le contenu du tableau
Dim tmpContenu As String = ""
'On va maintenant construire la même chose qu'un fichier .csv :
' - Chaque ligne est séparée par le caractère VbLf
' -Les données de chaque ligne sont séparées par le caractère ";"
'Prend chacune des lignes de la ListView
For Each I As ListViewItem In list.Items
'Prend chaque sous-élément de l'item actuel
For Each SI As ListViewItem.ListViewSubItem In I.SubItems
'Ajoute la valeur du subitem à la string représentant le tableau (avec le ";" pour séparer les valeurs)
tmpContenu = tmpContenu & SI.Text & ";"
Next
'Ajoute le caractère VbLf à la string représentant le tableau
tmpContenu = tmpContenu & Environment.NewLine
Next
'Retire de la chaîne de la String le ";" excédentaire de chaque ligne
tmpContenu = tmpContenu.Replace(";" & Environment.NewLine, Environment.NewLine)
'Enregistre maintenant cette String dans tes settings
My.Settings("malistview") = tmpContenu
End Sub
Public Sub Loadlistview(ByVal list As ListView)
Dim tmpContenu As String
Dim Lignes As String()
Dim Cells As String()
Dim incr As Integer
Dim Items As ListViewItem()
With list
.View = View.Details
.GridLines = True
.FullRowSelect = True
.CheckBoxes = True 'affiche les cases à cocher
.Columns.Add("Fichiers", 150, HorizontalAlignment.Left)
.Columns.Add("Date création", 120, HorizontalAlignment.Left)
.Columns.Add("Dernière Modification", 120, HorizontalAlignment.Left)
End With
'Récupère le tableau dans les settings
tmpContenu = CStr(My.Settings("malistview"))
'Divise la String en autant de lignes qu'il y en a (séparées par les VbLf)
'Attention , comme dans la construction le dernier caractère est VbLf on va se retrouver avec une ligne en trop dont il ne faudra pas tenir compte
Lignes = Regex.Split(tmpContenu, Environment.NewLine)
'Indique le nombre d'items que l'on va ajouter à la ListView
ReDim Items(Lignes.GetUpperBound(0) - 1) '-1 car il y a une ligne vide en trop dans le fichier
'Ajoute chaque ligne dans le tableau de données
For incr = 0 To Lignes.GetUpperBound(0) - 1
'Divise la ligne en autant de données qu'elle en contient (séparées par des ";")
Cells = Regex.Split(Lignes(incr), ";")
'Ajoute la ligne à la liste des lignes à ajouter
Items(incr) = New ListViewItem(Cells)
Next
'Ajoute l'ensemble des lignes à la ListView
list.Items.AddRange(Items)
End Sub
End Module
vb95
Messages postés3416Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023165 Modifié par vb95 le 9/12/2016 à 19:18
bonsoir Karin.code
My.Setting sert en VB Net à stocker des paramètres liées à l'application et non des données liées à l'application
En plus de 15 ans de Vb ( VB 6 et VB Net) je n'ai jamais eu à m'en servir . De plus on le voit très très rarement ( pour ne pas dire jamais ) utilisé dans les codes proposés sur le site !
Je te recommande plutôt le bon fichier Texte ( il a fait ses preuves et correspond bien plus au but recherché)
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 20182 9 déc. 2016 à 20:42
Bonsoir vb95,
merci pour ta réponse
tu a dit que My.Settings n'enregistre pas les données alors ça doit être la même chose pour la ListBox, mais avec le code que j'ai posté plus haut les données de la ListBox sont enregistrés en utilisant My.Setting non?
Ps:je me Trompe peut-être, ça ne fait même pas 1 ans que j'ai commencé le langage Vb.Net, il y a une grand différence entre nos connaissances dans le langage Vb.net)
vb95
Messages postés3416Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023165
>
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 2018 9 déc. 2016 à 21:25
Bonsoir Karin.code
Je ne t'ai jamais dit que My.settings ne pouvait pas enregistrer des données
Imagine une application quelconque avec une couleur de fonds pour l'application . Cette couleur de fonds tu peux la choisir ! toi tu préfères bleu ciel et moi turquoise ! Chacun de nous enregistre cette couleur de fonds avec My.Settings et lorsque nous ouvrons de nouveau l'application le lendemain chacun de nous a sa couleur préférée
C'est tout ce qui fait la différence entre un paramètre de l'application ( la couleur de fonds) et les données de l'application ( le contenu de la listview)
De plus une listbox n'a en principe qu'une seule véritable colonne alors qu'une listview peut en avoir plusieurs et là c'est pas évident de stocker tout ceci avec My.Settings
il faut utiliser les outils de Vb Net pour ce à quoi ils ont été destinés ( rappel avec ton sujet sur les MenuStrip )
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 20182
>
vb95
Messages postés3416Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023 10 déc. 2016 à 17:53
Bonsoir Vb95,
Désolé je n'ai pas bien compris ton explication plus haut
et de plus tu viens juste de me donner une idée pour un autre projet
Merci
vb95
Messages postés3416Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023165
>
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 2018 11 déc. 2016 à 01:04
bonsoir Karin.code
Pour reprendre ce que je disais plus haut suppose que l'application soit un carnet d'adresses . toi tu préfères un fonds bleu ciel et moi un fond turquoise : ça c'est un paramètre de l'application ; Par contre la listview qui va contenir nos contacts ça ce sont des données de l'application .
De plus tu utilises le contenu de ta listview comme données : or un contrôle textbox, listbox, listview, etc.... est fait pour afficher des données ( ces mêmes données étant elles dans des variables organisées en tableau ou list(of)) . Ton code aurait été bien plus clair et moins lourd en utilisant directement ces tableaux ou list(of) plutôt que le contenu de la listview
9 déc. 2016 à 20:30
Merci
C'est une bonne méthode je vais l'utiliser pour l'instant, si tu trouve quelque chose sur ce que j'ai mentionné plus haut tiens moi au courant s'il te plait
10 déc. 2016 à 13:42
http://www.developpez.net/forums/d952917-2/dotnet/langages/vb-net/sauvegarder-valeurs-d-listview-my-settings/
Ajouter une variable dans les propriétés du Projet -> Paramètres -> Nom : malistview et Type : String
Ajouter le code Suivant :
Modifié par cs_Le Pivert le 10/12/2016 à 16:29
mettre dans un Form
1 listview nommée : ListView1
1 button nommé: cmdopen
1 label nommé: lblfile
Ajouter une variable dans les propriétés du Projet -> Paramètres -> Nom : malistview et Type : String
Ajouter le code Suivant :
Bonne programmation
@+ Le Pivert
10 déc. 2016 à 17:55
Merci beaucoup c'est exactement ce que j'ai voulu
et c'est beaucoup mieux que la méthode a laquelle j'ai pensé, je voulais mettre deux ListBox (j'ai deux colonne dans la ListView) et utiliser le code que j'ai posté plus haut, au démarrage de la Form les données seront rempli dans les deux ListBox après importer les données de deux ListBox vers la ListeView
juste une chose, la ListView est dans la Form2 et je veux utiliser les données enregistrées dans la ListView dès le démarrage de la Form1, je sais que pour utiliser un variable dans plusieurs Form On remplace "Dim" par "Public", alors je dois faire comme suite :
je place et dans la Form1
et je met :
dans la Form1 :
dans la form2 :
cela devrait remplir la ListView qui est dans la Form2 dès le démarrage de la Form1 pour pouvoir utiliser les données et à chaque fois que j'ouvre la Form2 la LlistView sera rempli avec les nouvelles données et à la fermeture de la Form2 les données seront enregistrés
est-ce que je dois aussi faire ça?
10 déc. 2016 à 18:19
Mettre ceci dans un module:
Ensuite pour appeler dans les 2 Form:
voilà