Combobox items onthouden in het Register

Status
Niet open voor verdere reacties.

The Mighty Atom

Terugkerende gebruiker
Lid geworden
22 mei 2008
Berichten
1.380
Ik kom hier maar niet uit.

Ik gebruik het Windows Registy om control data naar toe te schrijven en te lezen, waaronder de checked en unchecked properties van een checkbox, de text property van een textbox, en de selected item van een combobox.

Dit werkt prima. Maar zodra ik meerdere items in een combobox stop, onthoud tie alleen de geselecteerde item. De andere items in de combobox onthoud tie niet.

Weet iemand hoe ik ervoor kan zorgen dat de alle items in een combobox onthouden worden door middel van het register?


ComboBox1.Items = RegKey.GetValue("ComboBox1", Nothing) schijnt niet te werken.
 
ik zou er een loop van maken, om ze weg te schrijven. Er zijn 2 mogelijkheden:

1.) de Combobox heeft vaste waarden, dan is het niet zo lastig en zal je het via een statische manier moeten doen.
2.) De waardes in de combo zijn dynamisch en kunnen dus veranderen. Wat ik dan zou doen is dit:

Code:
function SaveStuffsFromComboh(...)

dim sTemp as string[COLOR="seagreen"] 'houd temp. data vast[/COLOR]
dim i as integer[COLOR="seagreen"] 'loop-tijd[/COLOR]

for i = 0 to combobox1.listindex [COLOR="seagreen"]'listindex, of, wat was het? iig het gaat om het idee[/COLOR]
   sTemp = sTemp & vbcrlf & combobox1.list(i) [COLOR="seagreen"]'zoiets?[/COLOR]
next i

savetoregister sTemp [COLOR="SeaGreen"]'sla het op[/COLOR]
end function
De haal-het-uit-het-register is dan dus gewoon een Split() functie aanroepen met delimeter vbcrlf ofzo. Of je loopt het weer.​


just an idea,
V.


ps. wat precies probeer je te bereiken met "ComboBox1.Items = RegKey.GetValue("ComboBox1", Nothing)"? (wat zijn de parameters van getvalue()???)
 
Laatst bewerkt:
ik zou er een loop van maken, om ze weg te schrijven. Er zijn 2 mogelijkheden:

1.) de Combobox heeft vaste waarden, dan is het niet zo lastig en zal je het via een statische manier moeten doen.
2.) De waardes in de combo zijn dynamisch en kunnen dus veranderen. Wat ik dan zou doen is dit:

Code:
function SaveStuffsFromComboh(...)

dim sTemp as string[COLOR="seagreen"] 'houd temp. data vast[/COLOR]
dim i as integer[COLOR="seagreen"] 'loop-tijd[/COLOR]

for i = 0 to combobox1.listindex [COLOR="seagreen"]'listindex, of, wat was het? iig het gaat om het idee[/COLOR]
   sTemp = sTemp & vbcrlf & combobox1.list(i) [COLOR="seagreen"]'zoiets?[/COLOR]
next i

savetoregister sTemp [COLOR="SeaGreen"]'sla het op[/COLOR]
end function
De haal-het-uit-het-register is dan dus gewoon een Split() functie aanroepen met delimeter vbcrlf ofzo. Of je loopt het weer.​


just an idea,
V.


ps. wat precies probeer je te bereiken met "ComboBox1.Items = RegKey.GetValue("ComboBox1", Nothing)"? (wat zijn de parameters van getvalue()???)



Ik gebruik een soortgelijke code om checkboxen en textboxen te laten saven en loaden, hier is hoe:

Voor het wegschrijven van een checkbox naar het register doe ik:

Code:
RegKey.SetValue("CheckBox1", CheckBox1.Checked, RegistryValueKind.DWord)

Voor het lezen van een checkbox vanuit het register doe ik:

Code:
CheckBox1.Checked = RegKey.GetValue("CheckBox1", 0)

Voor een textbox, is het schrijven:

Code:
RegKey.SetValue("TextBox1", TextBox1.Text)

En voor het lezen:

Code:
TextBox1.Text = RegKey.GetValue("TextBox1", "Eventuele text hier")

Daarom dacht ik dat er misschien een soortgelijke code zou zijn om combobox items te laten wegschrijven en lezen.
En ja, de items zijn dynamisch, ze zijn dus steeds anders.

Jouw code geeft wel een paar errors, waaronder listindex en list, die kent tie niet, als ook savetoregister.

Echt vaag, zo simpel als het is met checkboxen en textboxen, zo ******* lastig is het met comboboxen. :/
 
Wat Vegras eigenlijk doet is gewoon een string maken met alle items in je combox (gescheiden met cr/lf) en deze dan als één waarde in het register zetten. Net zoals met een textbox. Bij het teruglezen doe je dan een split met cr/lf als delimiter.
 
Heb net dit scriptje gemaakt, werkt, maar weet niet of die register keys wel efficient gedaan zijn.

Code:
Option Strict On : Option Explicit On

Imports Microsoft.Win32

Public Class Form1

    Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles btnSave.Click
        For x As Integer = 0 To ComboBox1.Items.Count - 1
            Dim myRegKey As RegistryKey = Registry.CurrentUser.CreateSubKey("myRegKey")
            myRegKey.SetValue(ComboBox1.Name & "-" & x.ToString, ComboBox1.Items.Item(x))
        Next
    End Sub

    Private Sub btnLoad_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles btnLoad.Click
        Dim myRegKey As RegistryKey = Registry.CurrentUser.OpenSubKey("myRegKey", True)
        ComboBox2.Items.Clear()
        For Each valName As String In myRegKey.GetValueNames
            ComboBox2.Items.Add(myRegKey.GetValue(valName))
        Next
    End Sub
End Class

hoe kan ik alle values van zo een register key best deleten?

edit:
op welke besturingssystemen werken die register keys eigenlijk, of is dat overal het zelfde?
 
Laatst bewerkt:
Ah op die manier. Het zou kunnen werken, alleen is listindex en list niet bekend. Ik heb effe gegoogled en het schijnt dat dat VB6... dingen zijn. Ik gebruik VB.NET 2005.

Dus ik neem aan dat er een VB.NET versie daarvan is. Ik heb alleen geen idee welke het zou kunnen zijn. Ik heb gekeken naar Container, IndexOf, Items. Allemaal niet.
 
Mijn voorbeeld is vb.net hoor. Dit is toch wat je zoekt?
Code:
ComboBox1.Items.Count
 
Ik ben zo ff weg, dus ik zal pas later vandaag je code kunnen uitproberen, maar voor zover ik weet, telt ComboBox1.Items.Count alleen het aantal items in een combobox. Zitten er bijvoorbeeld drie items in, dan geeft tie dus als uitkomst het getal 3.

Lijkt me niet dat ik dat moet hebben, maar ik zal zo snel mogelijk je code uitproberen, dan hoor je het wel.

In ieder geval bedankt alvast. :)

Edit: bn2vs, jouw code werkt perfect! Precies wat ik nodig heb. Ontzettend bedankt man! De andere ook. :)

Edit2: Er is toch een probleem: ik heb namelijk nog meer waarden die ik laat opslaan, waaronder de checked state van checkboxen, en de text van textboxen. Al die waarden worden ineens ook aan mn combobox toegevoegd! Whatta?

Ik denk dat deze code het probleem is:

Code:
        For Each valName As String In RegKey.GetValueNames
            cb1.Items.Add(RegKey.GetValue(valName))

Als ik het goed begrijp, haalt GetValueNames alle regkeys uit de mn regkey directory zeg maar, dus ook andere waarden die ik daar bewaar. Het is dus de bedoeling dat alleen de waarden bestemd voor de combobox gelezen worden en in de combobox geplaatst worden.
Kan je het nog volgen? :P Ik pruts zelf nog wel ff verder, maar ik weet niet of me dit wel gaat lukken...
 
Laatst bewerkt:
@bn2vs - ah, zo zit het dus in 200X. crap :p

@atom de rss feed (sorry, flauw)
ja.. logisch...
Code:
For Each valName As String In RegKey.GetValueNames
            cb1.Items.Add(RegKey.GetValue(valName))
zoals je zelf al zei, dat zijn ALLE waardes. Werkt zoiets niet?
Code:
For Each valName As String In RegKey.[COLOR="Red"]ComboBoxX[/COLOR].GetValueNames
            cb1.Items.Add(RegKey.GetValue(valName))
zegmaar, het idee is dat je dus vanuit de RegKey alleen de combo pakt - heb geen flauw idee of het werkt, het klinkt logich. :p


Crap 200X,

V.:thumb:
 
zoals je zelf al zei, dat zijn ALLE waardes. Werkt zoiets niet?

Nee, want zoals ik ook al zei, ik bewaar meerdere waardes. Die worden ineens ook in combobox opgenomen. Ik moet alleen de combobox waarden terug in de combobox krijgen, niet de checkbox en textbox waarden

zegmaar, het idee is dat je dus vanuit de RegKey alleen de combo pakt - heb geen flauw idee of het werkt, het klinkt logich. :P

Ik heb er dit van gemaakt:

Code:
        For Each valName As String In RegKey.coboBSPdirs.GetValueNames
                       coboBSPdirs.Items.Add(RegKey.GetValue(valName))

Mijn combobox heet coboBSPdirs. Maar coboBSPdirs in de eerste regel geeft een error aan:

'coboBSPdirs' is not a member of 'Microsoft.Win32.RegistryKey'

Drommels. Dit is pittig. :P
 
Als je in deze 2 regels "myRegKey" verandert door coboBSPdirs.name doet die toch exact dat?

Code:
           Dim myRegKey As RegistryKey = Registry.CurrentUser.CreateSubKey("myRegKey")

Dim myRegKey As RegistryKey = Registry.CurrentUser.OpenSubKey("myRegKey", True)
 
Ik ben eruit. :)

Ik laat gewoon een nieuwe sleutel aanmaken, en ik stop daar de combobox items in. Zolang er geen andere tekenreekswaarden in komen te staan werkt het.

Toch bedankt. :D
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan