Enregistrer une listbox1 completement avec My.Settings

Signaler
-
 banana32 -
Bonjour, je voudrai savoir comment enregistrer une listbox1 avec My.Settings.

Merci de votre aide

25 réponses

Messages postés
7377
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
12 mai 2021
122
Bonjour,

Il y a un exemple dans ce programme:

http://www.vbfrance.com/codes/EXPLORATEUR-REGISTRE_54637.aspx


@+Le Pivert
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
32
Bonjour,

Ajoute un setting de type System.Collections.Specialized.StringCollection à ton projet

Puis pour la sauvegarde :
My.Settings.NomSetting = New Specialized.StringCollection()
For Each item In ListBox1.Items
  My.Settings.NomSetting.Add(item.ToString())
Next


Et pour la lecture :
For Each item In My.Settings.NomSetting
  ListBox1.Items.Add(item)
Next



_____________
Kenji

Bonjour,
Désoler je ne vois pas le code pour sauvegarder ma ListBox1 avec My.Settings.

Pouvez vous me donner la ligne de code ?

Si vous autre avez la solution, merci de prendre le temps de m'aider.

Cordialement

Bonjour Charles Racaud, je viens l'essayer ton code, dans la page de programmation pas d'erreur et quand je lance le programme, j'ai un message d'erreur que voici ci dessous :

Échec de l'initialisation du système de configuration

voila ce que j'ai marquer :
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
'LA SAUVEGARDE
My.Settings.rdva05112012 = New Specialized.StringCollection

For Each item In a05122012.Items
My.Settings.rdva05112012.Add(item.ToString())
Next

End Sub

'Lancement du programme
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

For Each item In My.Settings.rdva05112012
a05122012.Items.Add(item)
Next
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
32
Oui, j'ai oublié le teste d'existence pour le premier appel

If My.Settings.rdva05112012 IsNot Nothing Then
  For Each item In My.Settings.rdva05112012
    a05122012.Items.Add(item)
  Next
End If


_____________
Kenji

Même erreur :
Informations supplémentaires : Échec de l'initialisation du système de configuration

je crée mon projet avec visual basic je tien à rappeller !!!

Mon projet se bloque je ne peut plus rien faire comme tout ta leur.
Je suis obliger de le fermer avec le gestionnaire de tâche.

CODE :
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
'LA SAUVEGARDE
My.Settings.rdva05112012 = New Specialized.StringCollection

For Each item In a05122012.Items
My.Settings.rdva05112012.Add(item.ToString())
Next

End Sub

'Lancement
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
If My.Settings.rdva05112012 IsNot Nothing Then
For Each item In My.Settings.rdva05112012
a05122012.Items.Add(item)
Next
End If
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
32
Vérifie que ton fichier de configuration est bien formé (au mieux le supprimer)
Il se trouve dans %localappdata%\NomDeTonApplication\

_____________
Kenji

J'ai tout supprimer les fichiers dans Debug. J'ai relancer l'application et elle se lance mais ne se ferme plus.
Seul solution gestionnaire de tâche pour la fermer.

toujours la même erreur.
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
32
Combiens d'éléments y'a-t-il dans ta liste ?
As-tu testé en mode débogage pas-à-pas ?

_____________
Kenji
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Bonjour,
Et également :
1) je testerais (avec des msgboxes, par exemple) l'existence des items dans MySettings à l'ouverture de mon appli, sans même, à ce stade, tenter de les ajouter à ma listbox
2) s'ils y sont bien (donc contrôlé en 1)) : j'éviterais de tenter de charger ma listbox au Form_Load (étape de chargement de tous les contrôles, dont la listbox)

Je ne connais par ailleurs pas VB.Net et ne sais si une listbox peut être "liée" à des données. Si tel est le cas (et que tu l'as "liée") il te serait bien évidemment impossible de l'alimenter "hors lien". Mais tu nous l'aurais dit et je pense donc que cette hypothèse n'est pas à retenir ...

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ

qu'il à une ligne ou 0 ou rien cela ne change à rien l'application se lance parfaitement, j'entre du texte dedans, quand je veux fermer l'application, elle ne se ferme pas.
il me souligne : Me("rdva05112012") = value
j'ai une page d'erreur qui s'affiche qui fait 84 lignes. Je te donne le "bloc" ou l'erreur est :
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute()> _
Public Property rdva05112012() As Global.System.Collections.Specialized.StringCollection
Get
Return CType(Me("rdva05112012"),Global.System.Collections.Specialized.StringCollection)
End Get
Set
Me("rdva05112012") = value
End Set
End Property
End Class
End Namespace
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Salut

peut etre ainsi

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        
 Try
            For Each element As String In My.Settings.list
                ListBox1.Items.Add(element)
            Next
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub


Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        Try
            My.Settings.list.Clear()
             For Each item As String In ListBox1.Items
                My.Settings.list.Add(item)
            Next
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
       
    End Sub

"list" n'est pas un membre de 'mon_proget.my.mysettings'.

Rien ne va !!!

Pourquoi es si difficile pour sauvegarder une ListBox alors qu'une TextBox ne prend qu'une seul ligne ???

Pouvez vous me trouver une solution, cela fait 2 jours que je cherche sur le net et rien à ce sujet.

Merci à vous tous
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Je ne sais pas pourquoi (je n'ai même pas VB.Net) les choses sont si compliquées.
Mais si elles le sont ====>> pense alors à une seule donnée à inscrire dans MySettings, donnée sous forme d'une chaîne (string) toto composée de sous-chaînes (tes différents items de ta listbox) séparées par un retour charriot (ou autre de ton choix)
A la lecture (pour recharger ta listbox) il te suffira alors d'éclater cette chaîne toto par rapport au séparateur choisi (retour charriot ou autre) ===>> tu obtiendras ainsi un array dont chaque élément sera à ajouter à ta listbox.
Et picétou (si vraiment VB.Net n'offre pas du "plus mieux").


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
oui il faut le déclarer
clique sur
projet -> properties > settings
et dans le tableau tu déclares ta variable
je l'ai nommé list et le type est system.collections.specialized.stringcollection
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Tiens !
C'est drôle : je viens de rechercher sur ce même forum ===>> j'y ai trouvé, entre autres, une discussion vielle de 2009 et qui traite de la même problématique, résolue de la manière que je viens de te suggérer. Etonnant ? ===>>
Tapez le texte de l'url ici.
tu trouveras le code utilisant cette méthode passe-partout au second message de la discussion dont il s'agit.
Le séparateur utilisé a été vbcrlf ... Bof ... j'en aurais personnellement choisi un autre plus court, pour le même résultat.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ

Bonjour ShayW, je viens de créer un projet ne contenant q'une seul ListBox, une TextBox, un Button pour y voir plus claire.

Avec ton code j'ai une boite de dialogue qui apparaît. La voici :
"La référence d'objet n'est pas définie à une instance d'un objet."
Rien ne se sauvegarde !!
J'ai bien mit "list" en system.collections.specialized.stringcollection
J'ai ce message à l'ouverture du programme et aussi quand je le ferme. Voici toute la page de code :

Public Class Form1

Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Try
My.Settings.list.Clear()
For Each item As String In ListBox1.Items
My.Settings.list.Add(item)
Next
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try

End Sub

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

Try
For Each element As String In My.Settings.list
ListBox1.Items.Add(element)
Next
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
ListBox1.Items.Add(TextBox1.Text)

End Sub
End Class

Réponse à ucfoutu,

J'ai bien tomber sur cette page hier avant de vous contacter dont tu me fait part en quelques minutes, mais pour une simple sauvegarde d'une ListBox prend si j'ai bien compter 16 lignes ce qui me sembler beaucoup trop long pour une simple sauvegarde. C'est pour ceci que que ne l'ai pas tester.

Tu dit que ce code tu peut le faire plus court, je serai super comptant si tu pouvez y prendre le temps.

Mon projet prend déjà 2014 lignes avec 105 ListBox et je n'ai pas encore fini.
Si je voudrai sauvegarder déjà mes 105 listBox, ça me prendrai encore 1680 lignes supplémentaire ce qui est énorme.

Donc voilà, le code dans le lien que tu ma donner fonctionne, alors si tu veux bien le raccourcir merci à toi
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Salut

chez moi quand j'ai testé je n'ai pas d'erreurs

J'ai bien mit "list" en system.collections.specialized.stringcollection


tout d'abord
je n'ai pas déclaré la variable "list" avec le code mais dans le tableau du setting
projet -> prorieté -> onglet settings

"La référence d'objet n'est pas définie à une instance d'un objet."


à quelle ligne du code
lance ton prog pas à pas F8
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Tu dit que ce code tu peut le faire plus court

où ai-je dit cela ?
J'ai dit :
Le séparateur utilisé a été vbcrlf ... Bof ... j'en aurais personnellement choisi un autre plus court, pour le même résultat

qui parle d'un séparateur plus court, pas d'un code plus court !
Mon projet prend déjà 2014 lignes avec 105 ListBox et je n'ai pas encore fini.
Si je voudrai sauvegarder déjà mes 105 listBox, ça me prendrai encore 1680 lignes supplémentaire ce qui est énorme.

1) sauvegarder dans Mysettings un tel nombre de listboxes est un abus et laisse deviner un défaut de conception. Il est probable que tu aurais intérêt à utiliser une base de données !
2) où vois-tu la nécessité de réécrire tout ce code pour chaque listbox ? Il te suffirait de deux procédures paramétrées (un paramètre pour l'objet listbox à traiter et un pour le nom de l'enregistrement dans MySettings). Une procédure, donc, pour la sauvegarde et l'autre pour le rechargement, chacune des deux utilisant les deux paramètres (listbox et nom/enregistrement)... Mais c'est là le B.A.BA
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ