Husselen van listbox

Status
Niet open voor verdere reacties.

bonnowagt

Gebruiker
Lid geworden
7 dec 2006
Berichten
445
Ik heb listbox1. Hierin staan bijvoorbeeld 20 items(songs) zonder pad aanduiding, bijvoorbeeld: Night Fever.
vervolgens heb ik listbox2, hierin staan dezelfde songs maar dan met padaanduiding, bijvoorbeeld: C:\muziek\night fever.mp3
Listbox2 is invisible.
Als een song wordt geselecteerd wordt dezelfde song in listbox geslecteerd en speel deze vervolgens af op de AXwindowsmediaplayer1.url=listbox2.selecteditem.
Dit werkt perfect.

Mijn vraag is met betrekking tot shuffle. Ik kan deze songs afspelen in willekeurige volgorde met een randomfunctie, maar ik wil de lijst husselen, zodat de songs in een andere volgorde komen en de lijst dan gewoon van boven anar beneden wordt afgespeeld.
 
Hier zijn een aantal methoden voor. De meest eenvoudige is een groot aantal keren de eerste locatie te verwisselen met een random gekozen andere locatie. Bijvoorbeeld: je hebt vier locaties en je genereert 5 maal een random getal tussen 2 en 4: 2,4,3,2,3

start:
1234
stap een: wissel locatie 1 en 2
2134
stap twee: wissel locatie 1 en 4
4132
stap drie: wissel locatie 1 en 3
3142
stap vier: wissel locatie 1 en 2
1342
stap vijf: wissel locatie 1 en 3
4312

Normaalgesproken gebruikt men 2 tot 5 keer het aantal wisselingen voor de lengte van de lijst. dus bijvoorbeeld 50 keer wisslen voor een lijst met 10 nummers
 
Ik geloof niet dat ik dit begrijp. Ik heb soms een speellijst met 200 nummers.
De shuffle moet dus alle liedjes doorelkaar heen shuffelen en dan gewoon van boven naar beneden de speellijst weer afspelen.
 
Ja, en ik heb aangegeven hoe dat kan. Waar loop je vast?

even een voorbeeld om een listbox te randomizen:

Code:
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim temp As String
        Dim myRand As Random
        Dim nummer As Long
        Dim i As Long
        Randomize()

        myRand = New Random


        For i = 1 To ListBox1.Items.Count * 5
            nummer = myRand.Next(ListBox1.Items.Count - 1) + 1
            temp = ListBox1.Items(0)
            ListBox1.Items(0) = ListBox1.Items(nummer)
            ListBox1.Items(nummer) = temp
        Next


    End Sub

even een listbox en een knop op een form zetten, listbox vullen met wat items en dan deze code onder de knop loslaten
 
ja. de functie is echt anders.

Rand 50 geeft 0-49
rand 49 + 1 geeft 1-49
 
Het werkt perfect ik heb voor zeer grote speellijsten een lagere * factor ingesteld maar voor de rest heel erg bedankt.
 
De eerste code is wat langzaam omdat in VB het form op de achtergrond de lijst telkens loopt aan te passen. Voor de volledigheid een code die gebruikt maakt van externe lijsten. Volgens mijn timer is de code ruim 100x sneller bij grotere lijsten!

Code:
        Dim minlijst As List(Of String)
        Dim addlijst As List(Of String)
        Dim myRand As Random
        Dim nummer As Long

        Randomize()

        myRand = New Random
        minlijst = New List(Of String)
        addlijst = New List(Of String)

        For Each temp As String In ListBox1.Items
            minlijst.Add(temp)
        Next

        While minlijst.Count
            nummer = myRand.Next(minlijst.Count)
            addlijst.Add(minlijst(nummer))
            minlijst.RemoveAt(nummer)
        End While

        ListBox1.Items.Clear()
        ListBox1.Items.AddRange(addlijst.ToArray)
 
Hallo,

Ik heb je code uitgeprobeerd maar de lijst veranderd niet het is wel even blanco maar alles komt weer op dezelfde plaats terecht.
 
Hallo

De code werkt uitstekend en veel sneller binnen vier seconden zijn meer dan 9000 songs gehusseld. Ik had de code letterlijk overgenomen terwijl list2 de gegevens met het pad vormen, dus ik moest list 2 husselen en dan zonder ext overbrengen anar list 1. Het werkt nu meer dan prima, heel erg bedankt.
 
? dat is vreemd, ik heb het getest in mijn eigen omgeving en daar werkt het netjes. als je een trace plaatst bij het einde, zie je dan wel een random last in de "ADDLIST" variabele? mogelijk gaat er ergens buiten mijn code iets fout.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan