Springen naar inhoud


- - - - -
VS 2008 SOLVED

Listbox Items Opslaan In My.Settings.**** ?

VS2008

  • Log in a.u.b. om te beantwoorden
Er zijn 6 reacties in dit onderwerp

#1 Raketje

Raketje

    Starting Developer

  • Leden
  • 6 berichten
    Laatst bezocht 17 sep 2013 21:56

Geplaatst op 08 september 2013 - 23:56

Hoi allemaal,
ik gebruik in mijn progamma die ik aan het schrijven ben My.Settings om dingen in op te slaan.
Ik weet hoe ik aparte regels kan laten opslaan en die later onder elkaar openen in een listbox.
Ik vroeg me alleen af hoe ik dat andersom kan doen?
Dus een Listbox vol items kan laten opslaan in My.Settings.**** (Bijvoorbeeld)
De code die ik nu gebruik is het volgende alleen krijg ik steeds een error
:
Code:
		 For Each item In ListBox2.Items
			 My.Settings.Saver.Add(item)
			 ListBox2.Items.Clear()
		 Next


Dus als iemand zou kunnen helpen, zou dat geweldig zijn! :)

#2 pascalbianca

pascalbianca

    Webmaster/Admin

  • Webmaster
  • 4382 berichten
    Laatst bezocht 26 nov 2018 06:49
  • LocatieSusteren, Nederland, Midden Limburg.
Inzender

Geplaatst op 09 september 2013 - 06:05

Het stukje code
Visual Basic Code:
Listbox2.items.clear()
maakt je listbox leeg in zijn geheel in een keer leeg en niet stukje voor stukje.
Wat je zou kunnen proberen is pas nadat alles opgeslagen is de listbox te legen.

Visual Basic Code:
If My.Settings.Saver Is Nothing Then
My.Settings.Saver = new StringCollection
End If

My.Settings.Saver.Clear()
For Each item In ListBox2.Items
My.Settings.Saver.Add(item)
Next
My.Settings.Save()

listbox2.items.clear()


Vergeet wel niet de import erbij te zetten bovenaan.
Visual Basic Code:
Imports System.Collections.Specialized

Hier getest en werkt zoals jij wenst.

#3 Raketje

Raketje

    Starting Developer

  • Leden
  • 6 berichten
    Laatst bezocht 17 sep 2013 21:56

Geplaatst op 09 september 2013 - 13:55

 pascalbianca, on 09 september 2013 - 06:05, said:

Het stukje code
Visual Basic Code:
Listbox2.items.clear()
maakt je listbox leeg in zijn geheel in een keer leeg en niet stukje voor stukje.
Wat je zou kunnen proberen is pas nadat alles opgeslagen is de listbox te legen.

Visual Basic Code:
If My.Settings.Saver Is Nothing Then
My.Settings.Saver = new StringCollection
End If

My.Settings.Saver.Clear()
For Each item In ListBox2.Items
My.Settings.Saver.Add(item)
Next
My.Settings.Save()

listbox2.items.clear()


Vergeet wel niet de import erbij te zetten bovenaan.
Visual Basic Code:
Imports System.Collections.Specialized

Hier getest en werkt zoals jij wenst.

Enorm bedankt! het is eindelijk gelukt!
Dit was echt een hoofdbreker voor me van de laatste 2 dagen.

Wel heb ik hem zonder de volgende stukjes code gebruikt, en het werkt gewoon :)
Zonder:
Code:
	Imports System.Collections.Specialized 

&
Code:
If My.Settings.Saver Is Nothing Then 
My.Settings.Saver = new StringCollection 
End If 



#4 ON3WVS

ON3WVS

    Starting Developer

  • Leden
  • 21 berichten
    Laatst bezocht 13 aug 2018 21:49

Geplaatst op 29 juli 2018 - 20:57

Hallo, even een oude topic terug oprakelen:

Ik had graag iets gelijkaardigs gedaan maar dan de inhoud van een dictionary opslaan in een my.settings item wanneer ik op een "save" knop druk.
Ook wilde ik de inhoud van het my.settings item in mijn dictionary laden wanneer het programma opstart

Ik ben al begonnen met de import toe te voegen :-)

Code:
Private Sub cmdSave_Click(sender As Object, e As EventArgs) Handles cmdSave.Click
		My.Settings.AdressenOpslaan = myDictionary
	End Sub


Maar ik geraak hier niet ver mee. Ik krijg dat "AdressenOpslaan" readonly is en "Value of type "Dictionary (Of string, string) cannot be converted to String collection

Thanks!

#5 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1092 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 30 juli 2018 - 18:04

Bericht bekijkenON3WVS, op 29 juli 2018 - 20:57, zei:

Ik had graag iets gelijkaardigs gedaan maar dan de inhoud van een dictionary opslaan in een my.settings item wanneer ik op een "save" knop druk.
Ook wilde ik de inhoud van het my.settings item in mijn dictionary laden wanneer het programma opstart

Ik ben al begonnen met de import toe te voegen :smile:

Code:
Private Sub cmdSave_Click(sender As Object, e As EventArgs) Handles cmdSave.Click
	 My.Settings.AdressenOpslaan = myDictionary
End Sub


Maar ik geraak hier niet ver mee. Ik krijg dat "AdressenOpslaan" readonly is en "Value of type "Dictionary (Of string, string) cannot be converted to String collection



a. AdressenOpslaan heeft Application scope, dat is read-only.
b. AddressenOpslaan moet van het juiste type zijn (maar dat gaat je niet verder helpen met een IDictionary: zie B).
c. De xml serializer die gebruikt wordt voor de settings kan geen implementoren van de IDictionary interface serializeren noch deserializeren (en je generieke Dictionary(Of String, String) is een implementor van die interface).


a. Maak user-scope van je settings.
b. Kies het juiste type

c. Mogelijke oplossingen:

1. Maak van je key-value pairs een string en sla de settings op in een stringcollection, bij het lezen kan je ze dan parsen naar key-value-pairs
2. Sla alle key-value pairs afzonderlijk op als een setting (key is dan de naam van de setting en de value is dan de waarde van de setting). Omgekeerd kan enkel als je de keys hardcodeerd, of geen enkele andere setting opslaat.
3. Sla de keys afzonderlijk op in een setting met de naam "keys" en de values in een setting met de naam "values"
4. Gebruik de DataContractSerializer om de settings te serializeren en te deserializeren naar string
5. Maak een eigen afgeleide van je dictionary en maak die serializable (die code is te vinden op het net, dus je hoeft het zelf niet te schrijven)
6. Serializeer / deserializeer naar en van json (b.v. met json.net)
7. Maak een eigen serializeerbare klasse die de keys en values opslaat.
8. Maak een eigen serializer en registreer die voor je dictionary.
9. Enzovoort ...


Dat klinkt natuurlijk allemaal wat moeilijk, maar is het niet echt.
Bijvoorbeeld voor 7:

De klasse
Visual Basic Code:

 <Serializable>
 Public Class Info

	 Public Sub New()
	 End Sub

	 Public Sub New(dict As Dictionary(Of String, String))
   	   Keys = dict.Keys.ToList
		  Values = dict.Values.ToList
	 End Sub

	 Public Property Keys As List(Of String)
	 Public Property Values As List(Of String)

	 Public Function ToDictionary() As Dictionary(Of String, String)
   	   Dim result = New Dictionary(Of String, String)
		  For index = 0 To Keys.Count - 1
	 		 result(Keys(index)) = Values(index)
		  Next
		  Return result
	 End Function
 End Class



Noteer dat ik in ToDictionary niet result.Add gebruik, maar de values eventueel overschrijf voor een bepaalde key.
Om geen fouten te krijgen (de keys moeten uniek zijn in een dictionary)

Settings lezen of schrijven:
Visual Basic Code:

	 Dim dict As Dictionary(Of String, String) = Nothing

	 If My.Settings.Infos Is Nothing Then
		 dict = New Dictionary(Of String, String) From {
			 {"Naam", "Dirk Andries"},
			 {"Adres", "Koekoekstraat 70, 9090 Melle"},
			 {"Land", "België"}
		 }
		 ' save settings
		 My.Settings.Infos = New Info(dict)
	 Else
		 ' lees settings
		 dict = My.Settings.Infos.ToDictionary()
		 Text = dict("Naam") + " | " + dict("Adres") + " | " + dict("Land")
	 End If




#6 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1092 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 30 juli 2018 - 18:09

Bericht bekijkenDirk Andries, op 30 juli 2018 - 18:04, zei:

Bijvoorbeeld voor 7:
Ook niet vergeten om bij de Settings het juiste type te kiezen (je moet het voor 7 zelf intikken: namespace.type ).

#7 ON3WVS

ON3WVS

    Starting Developer

  • Leden
  • 21 berichten
    Laatst bezocht 13 aug 2018 21:49

Geplaatst op 30 juli 2018 - 22:01

Bedankt Dirk, ik probeer jouw code nog te implementeren in mijn toepassing maar dit gaat al een beetje boven mijn pet. Ik heb inmiddels de scope van mijn stringcollection op "user" gezet, de rest moet ik nog eens proberen te vertalen naar mijn toepassing. Ik hou je op de hoogte!





Ook met taq VS 2008 SOLVED, VS2008 voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[VS 2008 SOLVED] Untitled 1

Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)