Medialiste durchspielen

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Medialiste durchspielen

    Hallo ich habe eine Form mit einem WindowsMediaPlayer- Control.
    In einer ListBox stehen meine Titel, diese lasse ich so abspielen:

    VB.NET-Quellcode

    1. Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
    2. AxWindowsMediaPlayer1.URL = lng & "\" & ListBox1.SelectedItem
    3. AxWindowsMediaPlayer1.Ctlcontrols.play()
    4. End Sub


    Das klappt auch, nur möchte ich bei Songende den nächste Titel abspielen, aber so klappt es nicht:

    VB.NET-Quellcode

    1. Private Sub AxWindowsMediaPlayer1_PlayStateChange(ByVal sender As Object, ByVal e As AxWMPLib._WMPOCXEvents_PlayStateChangeEvent) Handles AxWindowsMediaPlayer1.PlayStateChange
    2. If AxWindowsMediaPlayer1.playState = WMPLib.WMPPlayState.wmppsMediaEnded Then
    3. ListBox1.SelectedIndex = ListBox1.SelectedIndex + 1
    4. End If
    5. End Sub


    Ich habe es auch schon gegoogelt und immer wird die Lösung die ich auch habe vorgeschlagen, aber es klappt nicht.
    Hat jemand eine Idee wie man es besser machen könnte?
    Mach Dir eine separate Routine, die Du von Deinen beiden Routinen aufrufen kannst und übergib ihr den aktuellen Index.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Meinst du so ? :

    VB.NET-Quellcode

    1. Private Sub AxWindowsMediaPlayer1_PlayStateChange(ByVal sender As Object, ByVal e As AxWMPLib._WMPOCXEvents_PlayStateChangeEvent) Handles AxWindowsMediaPlayer1.PlayStateChange
    2. If AxWindowsMediaPlayer1.playState = WMPLib.WMPPlayState.wmppsMediaEnded Then
    3. next_song()
    4. End If
    5. End Sub
    6. Public Sub next_song()
    7. AxWindowsMediaPlayer1.URL = pfad & "\" & ListBox1.SelectedItem
    8. AxWindowsMediaPlayer1.Ctlcontrols.play()
    9. End Sub

    VB.NET-Quellcode

    1. Private Sub AxWindowsMediaPlayer1_PlayStateChange(ByVal sender As Object, ByVal e As AxWMPLib._WMPOCXEvents_PlayStateChangeEvent) Handles AxWindowsMediaPlayer1.PlayStateChange
    2. If AxWindowsMediaPlayer1.playState = WMPLib.WMPPlayState.wmppsMediaEnded Then
    3. MsgBox("passt!")
    4. End If
    5. End Sub


    die MessageBox kommt...
    @ErfinderDesRades

    Ja.
    Ja es rückt eins vor, ich habe es jetzt mal so probiert, es rückt eins vor, es wird aber nichts abgespielt.

    VB.NET-Quellcode

    1. Private Sub AxWindowsMediaPlayer1_PlayStateChange(ByVal sender As Object, ByVal e As AxWMPLib._WMPOCXEvents_PlayStateChangeEvent) Handles AxWindowsMediaPlayer1.PlayStateChange
    2. Select Case e.newState
    3. Case 8 ' MediaEnded
    4. ListBox1.SelectedIndex = ListBox1.SelectedIndex + 1
    5. End Select
    6. End Sub


    Und wenn ich das Item manuell änder, geht es.
    Dann ist im PlaystateChanged-Event wohl zu früh, um das nächste Musikstück abzufahren.
    vlt. Abhilfe: Ein Idle-Delay:

    VB.NET-Quellcode

    1. Private Sub AxWindowsMediaPlayer1_PlayStateChange(ByVal sender As Object, ByVal e As AxWMPLib._WMPOCXEvents_PlayStateChangeEvent) Handles AxWindowsMediaPlayer1.PlayStateChange
    2. If AxWindowsMediaPlayer1.playState = WMPLib.WMPPlayState.wmppsMediaEnded Then
    3. Dim idleHandler As EventHandler = Sub(s, evArgs)
    4. RemoveHandler Application.Idle, idleHandler
    5. ListBox1.SelectedIndex += 1
    6. End Sub
    7. AddHandler Application.Idle, idleHandler
    8. End If
    9. End Sub
    Da kannste auch die next_song()-Routine aufrufen. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!