Windows Media Player Control, ( Player.Ctlcontrols.play()),problem

  • VB.NET

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

    Windows Media Player Control, ( Player.Ctlcontrols.play()),problem

    Guten Morgen

    mein Problem Heute ist das Windows Media Player Control, und zwar mit Player.Ctlcontrols.play().
    Ich Poste erst einmal den ganzen Code den ich hab.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports AxWMPLib
    2. Public Class Form1
    3. Dim listeLaden As New Specialized.StringCollection
    4. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    5. Dim liste As System.Collections.Specialized.StringCollection = My.Settings.URL
    6. For Each s As String In liste
    7. ListBox1.Items.Add(s)
    8. 'ListBox1.SelectedIndex = 0
    9. Player.URL = CType(ListBox1.SelectedItem, String)
    10. ListBox1.SelectedItem = My.Settings.Item
    11. Player.Ctlcontrols.currentPosition = My.Settings.Position
    12. Next
    13. End Sub
    14. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    15. 'listbox laden
    16. ListBox1.Items.Clear()
    17. Using ofd As New OpenFileDialog
    18. ofd.Multiselect = True
    19. If ofd.ShowDialog = DialogResult.OK Then
    20. For Each eintrag As String In ofd.FileNames
    21. listeLaden.Add(eintrag)
    22. ListBox1.Items.Add(eintrag)
    23. ListBox1.SelectedIndex = 0
    24. Player.URL = CType(ListBox1.SelectedItem, String)
    25. Next
    26. End If
    27. End Using
    28. End Sub
    29. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    30. 'speichern
    31. My.Settings.URL = listeLaden
    32. My.Settings.Position = Player.Ctlcontrols.currentPosition
    33. My.Settings.Item = CType(ListBox1.SelectedItem, String)
    34. My.Settings.Save()
    35. My.Settings.Reload()
    36. End Sub
    37. Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
    38. Player.URL = CType(ListBox1.SelectedItem, String)
    39. End Sub
    40. Private Sub Form1_Closed(sender As Object, e As EventArgs) Handles Me.Closed
    41. My.Settings.Item = CType(ListBox1.SelectedItem, String)
    42. My.Settings.Position = Player.Ctlcontrols.currentPosition
    43. My.Settings.Save()
    44. My.Settings.Reload()
    45. End Sub
    46. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    47. Player.Ctlcontrols.play()
    48. End Sub
    49. Private Sub Player_PlayStateChange(sender As Object, e As _WMPOCXEvents_PlayStateChangeEvent) Handles Player.PlayStateChange
    50. If Player.playState = WMPLib.WMPPlayState.wmppsMediaEnded Then
    51. ListBox1.SelectedIndex = ListBox1.SelectedIndex + 1
    52. Player.Ctlcontrols.play()
    53. End If
    54. End Sub
    55. End Class


    In diesem Teil des Codes

    VB.NET-Quellcode

    1. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    2. Player.Ctlcontrols.play()
    3. End Sub

    funktioniert Player.Ctlcontrols.play().
    Aber in diesem teil des Codes nicht.

    VB.NET-Quellcode

    1. Private Sub Player_PlayStateChange(sender As Object, e As _WMPOCXEvents_PlayStateChangeEvent) Handles Player.PlayStateChange
    2. If Player.playState = WMPLib.WMPPlayState.wmppsMediaEnded Then
    3. ListBox1.SelectedIndex = ListBox1.SelectedIndex + 1
    4. Player.Ctlcontrols.play()
    5. End If
    6. End Sub


    Hab im Internet schon gesucht aber nichts gefunden.
    Hoffe das mir jemand Helfen kann.

    MfG. Willi
    @papawt Was soll denn passieren?
    Ggf. musst Du die aktuelle Wiedergabe erst stoppen.
    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!
    @papawt Vielleicht solltest Du Dich überzeugen, dass dem Mediaplayer der nächste Titel zugewiesen wird.
    Dafür gibt es Haltepunkte.
    Debuggen, Fehler finden und beseitigen
    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!
    Hallo
    im Debbug Modus konnte ich nichts finden.
    Hab jetzt was anderes gemacht.Hab ein neues Projekt erstellt, mit identischem Code, inentische Steuerelemente
    und es verläuft alles unterschiedlich.
    Habe zwei Videos angehängt um den Unterschied zu sehen.
    In einem wird derselbe Titel wiedergegeben, im anderen wird nichts abgespielt wenn der Titel zu ende ist.

    MfG. Willi
    Dateien
    • 6.rar

      (2,48 MB, 68 mal heruntergeladen, zuletzt: )
    • 7.rar

      (2,09 MB, 72 mal heruntergeladen, zuletzt: )
    Der Wechsel zwischen SelectedListBoxItem und Play läuft zu schnell. Mein classic delay hack, der da mal wieder funktioniert: kleine Pause einlegen:

    VB.NET-Quellcode

    1. Private Async Sub Player_PlayStateChange(sender As Object, e As _WMPOCXEvents_PlayStateChangeEvent) Handles Player.PlayStateChange
    2. If Player.playState = WMPLib.WMPPlayState.wmppsMediaEnded Then
    3. ListBox1.SelectedIndex = ListBox1.SelectedIndex + 1
    4. Await Threading.Tasks.Task.Delay(100)
    5. Player.Ctlcontrols.play()
    6. End If
    7. End Sub

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Natürlich stürzt es ab. Du erhöhst den ListBoxIndex, ohne zu überprüfen, ob es das Folgeelement, welches Du blindlings ansteuerst, gibt. Abhängig davon, ob Du ne PlayListLoop machen willst oder dann finito sein soll, musst Du das eben abändern.
    Mit Loop:

    VB.NET-Quellcode

    1. If Player.playState = WMPLib.WMPPlayState.wmppsMediaEnded Then
    2. ListBox1.SelectedIndex = (ListBox1.SelectedIndex + 1) Mod ListBox1.Items.Count

    Ende Gelände:

    VB.NET-Quellcode

    1. If Player.playState = WMPLib.WMPPlayState.wmppsMediaEnded AndAlso ListBox1.SelectedIndex < ListBox1.Items.Count - 1 Then
    2. ListBox1.SelectedIndex += 1
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.