Problem wenn die letzte Zeile der Listbox abgespielt wurde...

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Xiantrius.

    Problem wenn die letzte Zeile der Listbox abgespielt wurde...

    Ich habe ein problem.
    Wenn die letzte Zeile abgespielt wurde soll er entweder stoppen, oder in der ersten Zeile wieder anfangen abzuspielen.
    Mein Player ist eigentlich auch fertig bis auf ein problem komme ich nicht klar.
    Ich benutze den plugin von Windows Mediaplayer.
    Siehe Code:

    VB.NET-Quellcode

    1. Private Sub AxWindowsMediaPlayer1_PlayStateChange(sender As Object, e As AxWMPLib._WMPOCXEvents_PlayStateChangeEvent) Handles AxWindowsMediaPlayer1.PlayStateChange
    2. If AxWindowsMediaPlayer1.playState = WMPLib.WMPPlayState.wmppsMediaEnded Then
    3. Play_Timer.Enabled = True
    4. Label1.Text = 0
    5. If Label1.Text >= 0 Then
    6. If Button1.Text = "Abspielen" Then
    7. Button1.Text = "Stop"
    8. Button2.Text = "pausieren"
    9. AxWindowsMediaPlayer1.URL = ListBox1.SelectedItem
    10. Button1.Enabled = True
    11. Button2.Enabled = True
    12. ElseIf Button1.Text = "Stop" Then
    13. Button1.Text = "Abspielen"
    14. Button2.Text = "fortsetzen"
    15. Button1.Enabled = False
    16. Button2.Enabled = False
    17. AxWindowsMediaPlayer1.Ctlcontrols.stop()
    18. End If
    19. Else
    20. MsgBox("Bitte zuerst eine Musik/Videodatei zum abspielen auswählen!", MsgBoxStyle.Exclamation, "Befehl nicht ausführbar:")
    21. End If
    22. '------------------------------------------------------------------
    23. 'Dieser Code macht mir probleme
    24. If ListBox1.SelectedIndex <= ListBox1.Items.Count - 1 Then
    25. ListBox1.SelectedIndex = ListBox1.SelectedIndex + 1
    26. Else
    27. ListBox1.SelectedIndex = 0
    28. End If
    29. '------------------------------------------------------------------
    30. End If
    31. End Sub
    32. Private Sub Play_Timer_Tick(sender As System.Object, e As System.EventArgs) Handles Play_Timer.Tick
    33. ListBox1.SelectionMode = SelectionMode.One
    34. AxWindowsMediaPlayer1.URL = ListBox1.SelectedItem
    35. AxWindowsMediaPlayer1.Ctlcontrols.play()
    36. NextPlay_Timer.Enabled = True
    37. Play_Timer.Enabled = False
    38. End Sub
    39. Private Sub NextPlay_Timer_Tick(sender As System.Object, e As System.EventArgs) Handles NextPlay_Timer.Tick
    40. ListBox1.SelectionMode = SelectionMode.MultiExtended
    41. NextPlay_Timer.Enabled = False
    42. End Sub


    Wie bringe ich den Player und/oder die Listbox dazu zu prüfen ob es die letzte Zeile war und er wieder zur ersten Zeile springen soll?
    Sobald er die letzte Zeile fertig gespielt hat will er weiter switchen, da dies aber nicht geht wiederholt er einfach die letzte Zeile.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Xiantrius“ ()

    Mach es so (Wechsel für beide Richtungen):

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. If ListBox1.SelectedIndex >= ListBox1.Items.Count - 1 Then
    3. ListBox1.SelectedIndex = 0
    4. Else
    5. ListBox1.SelectedIndex = ListBox1.SelectedIndex + 1
    6. End If
    7. End Sub
    8. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    9. If ListBox1.SelectedIndex <= 0 Then
    10. ListBox1.SelectedIndex = ListBox1.Items.Count - 1
    11. Else
    12. ListBox1.SelectedIndex = ListBox1.SelectedIndex - 1
    13. End If
    14. End Sub
    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!
    hmm ich hätte es aber gerne, dass er wieder beim ersten item anfängt, wenn er den letzten zuende gespielt hat.
    Wenn das der Mediaplayer in Windows auch kann, dann sollte es auch möglich sein, es selbst irgendwie zu machen.
    Trotzdem danke für den Vorschlag, als alternative werde es in Betracht ziehen.

    Sonst noch Vorschläge offen? ;)
    Hi
    btw. für sowas ist der Modulo-Operator praktisch. Das wäre @RodFromGermany:s Code, nur etwas umgeschrieben.

    VB.NET-Quellcode

    1. Dim direction As Integer = 1 'oder -1
    2. ListBox1.SelectedIndex = (ListBox1.SelectedIndex + ListBox1.Items.Count + direction) Mod ListBox1.Items.Count

    Schau' dir übrigens mal Rods Signatur an.

    Gruß
    ~blaze~

    Xiantrius schrieb:

    Sonst noch Vorschläge offen? ;)
    Ich gehe mal davon aus, dass Du meinen Code nicht ausprobiert hast. ;(
    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!
    Also ich habe jetzt alle codes ausprobiert.
    Das end ergebnis ist das gleiche...
    Nur der Code wurde anders geschrieben.
    Wenn er zurück gehen soll dann spielt er einfach das gleiche item ab.
    Irgendwan kommen wir zu einer richtigen Lösung. ;)

    ich danke euch für die geduld und Zeit und hoffe das ich euch nicht zu arg nerve mit mein problem.
    Mit google hab ich schon gesucht und keine hinweise gefunden wie das gehen soll, wenn ich was übersehen haben sollte dann tut es mir leid.
    Was bezweckst Du denn damit?

    Xiantrius schrieb:

    VB.NET-Quellcode

    1. Label1.Text = 0
    2. If Label1.Text >= 0 Then
    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!
    Um sicher zu gehen das es nicht an mein Player liegt habe ich ein neues projekt gemacht und da kann ich ebenfalls nicht das ziel erreichen wenn er den letzten item durchgespielt hat, dann wiederholt er einfach den letzten item wieder. Ich will erreichen das er automatisch wieder ins erste item in der listbox hoch switchen.
    Wenn jemand von euch ein eigenen player programmiert hat und ihn noch hat wäre ich auch dankbar diesen stück code anschauen zu dürfen, falls da das problem gelöst wurde.

    Option Strict On hat auch nichts gebracht.
    Es gibt mit sicherheit ein trick das hinzubekommen. Blos hab ich selbst nichts herausgefunden und meine testergebnisse liefen leider immer schief und habe nichts gefunden, wäre also dankbar, falls jemand noch irgend eine idee hat.

    Ich melde mich morgen wieder gute nacht.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Xiantrius“ ()

    So endlich hab ich es geknackt.

    Danke an dir RodFromGermany, ich hatte nur nicht die Fehlerquelle gefunden warum es nicht funktionierte es hat nur der Code ListBox1.SelectionMode = SelectionMode.One gefehlt

    VB.NET-Quellcode

    1. Private Sub AxWindowsMediaPlayer1_PlayStateChange(sender As Object, e As AxWMPLib._WMPOCXEvents_PlayStateChangeEvent) Handles AxWindowsMediaPlayer1.PlayStateChange
    2. If AxWindowsMediaPlayer1.playState = WMPLib.WMPPlayState.wmppsMediaEnded Then
    3. Play_Timer.Enabled = True
    4. Label1.Text = CStr(0)
    5. If CDbl(Label1.Text) >= 0 Then
    6. If Button1.Text = "Abspielen" Then
    7. Button1.Text = "Stop"
    8. Button2.Text = "pausieren"
    9. AxWindowsMediaPlayer1.URL = CStr(ListBox1.SelectedItem)
    10. Button2.Enabled = True
    11. Button4.Enabled = True
    12. Button3.BackgroundImage = My.Resources._Stop
    13. Button4.BackgroundImage = My.Resources._pausieren
    14. ElseIf Button1.Text = "Stop" Then
    15. Button1.Text = "Abspielen"
    16. Button2.Text = "fortsetzen"
    17. Button2.Enabled = False
    18. Button4.Enabled = False
    19. AxWindowsMediaPlayer1.Ctlcontrols.stop()
    20. Button3.BackgroundImage = My.Resources._Play
    21. Button4.BackgroundImage = My.Resources._fortsetzen_Sperre
    22. End If
    23. Else
    24. MsgBox("Bitte zuerst eine Musik/Videodatei zum abspielen auswählen!", MsgBoxStyle.Exclamation, "Befehl nicht ausführbar:")
    25. End If
    26. If ListBox1.SelectedIndex >= ListBox1.Items.Count - 1 Then
    27. ListBox1.SelectionMode = SelectionMode.One
    28. ListBox1.SelectedIndex = 0
    29. Else
    30. ListBox1.SelectionMode = SelectionMode.One
    31. ListBox1.SelectedIndex = ListBox1.SelectedIndex + 1
    32. End If
    33. End If
    34. End Sub


    'Damit es nicht zu probleme kommt wird mein Timer aktiviert und ListBox1.SelectionMode = SelectionMode.One wird kurz umgestellt.

    VB.NET-Quellcode

    1. Private Sub Play_Timer_Tick(sender As System.Object, e As System.EventArgs) Handles Play_Timer.Tick
    2. ListBox1.SelectionMode = SelectionMode.One
    3. AxWindowsMediaPlayer1.URL = CStr(ListBox1.SelectedItem)
    4. AxWindowsMediaPlayer1.Ctlcontrols.play()
    5. ListBox1.SelectionMode = SelectionMode.MultiExtended
    6. Play_Timer.Enabled = False
    7. End Sub


    Vielen dank für die Geduld und vorschläge an euch die hier helfen wollten.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. 'Spielt das aktuell markierte Lied ab und geht in der liste bis ende weiter
    2. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    3. Try
    4. Me.AxWindowsMediaPlayer1.URL = pfad & ListBox1.Items(ListBox1.SelectedIndex) & "\" & ListBox2.Items(ListBox2.SelectedIndex) & ComboBox1.Text.ToString
    5. Do Until Me.AxWindowsMediaPlayer1.playState = WMPLib.WMPPlayState.wmppsStopped
    6. Application.DoEvents()
    7. 'System.Threading.Thread.Sleep(100)
    8. If Me.AxWindowsMediaPlayer1.playState = WMPLib.WMPPlayState.wmppsStopped Then
    9. If ListBox2.SelectedIndex < ListBox2.Items.Count - 1 Then
    10. ListBox2.SelectedIndex = ListBox2.SelectedIndex + 1
    11. ListBox2.SelectionMode = SelectionMode.One
    12. Me.AxWindowsMediaPlayer1.URL = pfad & ListBox1.Items(ListBox1.SelectedIndex) & "\" & ListBox2.Items(ListBox2.SelectedIndex) & ComboBox1.Text.ToString
    13. Else
    14. Exit Do
    15. End If
    16. End If
    17. Loop
    18. If MessageBox.Show("ES WURDE ALLES ABGESPIELT !") Then
    19. Me.AxWindowsMediaPlayer1.close()
    20. End If
    21. Catch ex As Exception
    22. End Try
    23. End Sub



    Spoiler anzeigen

    VB.NET-Quellcode

    1. ''Spielt das aktuell markierte Lied ab und geht in der liste bis ende weiter unf fängt wieder vorne an !- Endlos Schleife der ListBox.
    2. Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
    3. Try
    4. anfang:
    5. Me.AxWindowsMediaPlayer1.URL = pfad & ListBox1.Items(ListBox1.SelectedIndex) & "\" & ListBox2.Items(ListBox2.SelectedIndex) & ComboBox1.Text.ToString
    6. Do Until Me.AxWindowsMediaPlayer1.playState = WMPLib.WMPPlayState.wmppsStopped
    7. Application.DoEvents()
    8. 'System.Threading.Thread.Sleep(100)
    9. If Me.AxWindowsMediaPlayer1.playState = WMPLib.WMPPlayState.wmppsStopped Then
    10. If ListBox2.SelectedIndex < ListBox2.Items.Count - 1 Then
    11. ListBox2.SelectedIndex = ListBox2.SelectedIndex + 1
    12. ListBox2.SelectionMode = SelectionMode.One
    13. Me.AxWindowsMediaPlayer1.URL = pfad & ListBox1.Items(ListBox1.SelectedIndex) & "\" & ListBox2.Items(ListBox2.SelectedIndex) & ComboBox1.Text.ToString
    14. Else
    15. Exit Do
    16. End If
    17. End If
    18. Loop
    19. ListBox2.SelectedIndex = 0
    20. GoTo anfang
    21. Catch ex As Exception
    22. End Try
    23. End Sub



    LG Andre ;)