2 vragen mbt listbox

Status
Niet open voor verdere reacties.

chrisje181

Gebruiker
Lid geworden
23 okt 2008
Berichten
106
Hoi,

Ik heb 2 vraagjes:

Ik wil via het volgende script zorgen dat de 10 items uit mijn listbox worden overgezet naar een eigen label. Alleen dit gaat fout bij het laatste item, die blijft in de listbox staan en dus wordt de laatste label niet ingevuld. Hoe los ik dit op? Ikgebruik onderstaande code:

Code:
lcount = lvl1ListBox.Items.Count - 1
        rnum = r.Next(0, lcount)
        lvl1Luik1.Text = lvl1ListBox.Items.Item(rnum)
        lvl1ListBox.Items.Remove(lvl1Luik1.Text)

        lcount = lvl1ListBox.Items.Count - 1
        rnum2 = r2.Next(0, lcount)
        lvl1Luik2.Text = lvl1ListBox.Items.Item(rnum2)
        lvl1ListBox.Items.Remove(lvl1Luik2.Text)

Zoals je ziet gaat er voor de 2e label alleen rnum, r, lvl1Luik worden aangepast naar rnum2, r2 en lvl1Luik2 maar lcount pas ik niet aan)

En de 2e vraag is:

Ik moet bovenstaande code 10 keer gebruiken, vanwege hetfeit dat ik 10 verschillende labels heb, genaamd label1 tot en met label 10
Hoe kan ik dit in een loopje zetten zodat ik maar 1 keer de code hoef te plaatsen ipv 10 keer?
 
Zoiets?

[cpp] Dim i As Integer = 1
For Each item As String In ListBox1.Items
For Each ctrl As Control In Me.Controls
If ctrl.Name = "Label" & i.ToString() Then ctrl.Text = item
Next
i += 1
Next
ListBox1.Items.Clear()[/cpp]
 
hij moet direct de waarde uit de listboxhalen, want anders kan hetvoorkomen dat ik dubbele waarde krijg in mijn labels, en dat mag niet. Of gebeurt dat niet met bovenstaande code? heb nu zelf dit, alleen dan pakt hij nog steeds de laatste niet:

Code:
For i As Integer = 1 To 10
            lcount = lvl1ListBox.Items.Count - 1

            If i = "10" Then
                rnum = "0"
                Me.Controls("lvl1Luik" & i).Text = lvl1ListBox.Items.Item(rnum)
                lvl1ListBox.Items.Remove(Me.Controls("lvl1Luik" & i).Text)
            Else
                rnum = r.Next(0, lcount)
                Me.Controls("lvl1Luik" & i).Text = lvl1ListBox.Items.Item(rnum)
                lvl1ListBox.Items.Remove(Me.Controls("lvl1Luik" & i).Text)
            End If

        Next i

en daarbij komt dat er meerdere labels en dingen in die usercontrol staan dushij moet specifiek de labels genaamd lvl1LuikXX hebben (waarbij XX is 1 tot en met 10)
 
Laatst bewerkt:
Mijn code haalt álle items uit de ListBox.
Kun je iets over de achtergrond van je programma vertellen, dan is het iets makkelijker om een passende oplossing te bedenken.
 
het betreft een game, beetje saw gerelateeerd. Ze zitten met 7 man in totaal opgesloten(waarvan er eigenlijk maar 1 echt het spel speelt) Dus er zijn 6namen van vrienden, 2 trap doors en 2 lege luiken.
In de listbox staan de items, die random verdeeld worden over de labels lvl1Luik[XX] (XX = 1 tot en met 10)
Die listbox is onzichtbaar tijdens het spel, maar hij moet wel steeds het item verwijderen uit de listbox zodra hij toegewezen is aan een label.
 
Dan heb je helemaal geen grafische control nodig. Je kunt beter een ArrayList gebruiken.
Maar waarom moeten de namen verwijderd worden? En worden alle namen toegewezen aan een Label? Kunnen dubbele namen voorkomen?
 
de namen moeten verwijderd wordenuit de listbox omdat ik dan weet dat alles verdeeld is. Er kunnen dus GEEN dubbele namen voorkomen, en de labels die de naam lvl1LuikXX dragen worden allemaal hernoemd met een item uit de listbox.
en ik wil een usercontrol vanwege het feit dat ik dat prettig vind werken. en een arraylist vind ik alleen maar vervelend, met de listbox kan ik tenminste nog kijken of het goed gaat.
 
Met een ArrayList (of in dit geval een gewone string-array) kun je ook door middel van breakpoints controleren of 'het goed gaat'. In feite kan er niks fout gaan als je d.m.v. een For-Loop alle items afgaat.
Om die items random in Labels te gooien, doe je het als volgt:

[cpp]Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim namen As String() = {"Jan", "Piet", "Klaas", "Chris", "JoZ1"}
Dim getallen As Integer() = {1, 2, 3, 4, 5}
Shuffle(getallen) ''//Shuffle getallen

For i As Integer = 0 To namen.Length - 1
Me.Controls("Label" & getallen(i).ToString).Text = namen(i)
Next
End Sub

Public Sub Shuffle(ByRef data() As Integer)
Dim x, swap As Integer
Dim r As Random = New Random()

For i As Integer = 0 To data.GetUpperBound(0)
x = r.Next(0, i)
swap = data(x)
data(x) = data(i)
data(i) = swap
Next i
End Sub[/cpp]

Met een ListBox doe je onnodig moeilijk, omdat de collectie iedere keer verandert als je er items uitgooit. Dit pikt die For-Loop dan weer niet, waardoor je alsnog aangewezen bent op arrays.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan