Listbox "Klick" SelectedIndexChanged ausführen

  • VB.NET

Es gibt 26 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Listbox "Klick" SelectedIndexChanged ausführen

    Hallöchen Ihr lieben...

    Verzweifle mal wieder an was "ganz einfachem"...

    Möchte Musik abspielen und habe da was schönes im Netz gefunden.
    Zur Zeit ist es so das ein Lied über OpenFileDialog ausgesucht wird, Ich möchte dies aber durch einen "Klick" SelectedIndexChanged machen......

    Wer kann mir helfen.

    Das ist der Code über OpenFileDialog

    VB.NET-Quellcode

    1. Private Sub ButtonStart_Click(sender As Object, e As EventArgs) Handles ButtonStart.Click
    2. Dim wahl As New OpenFileDialog
    3. If wahl.ShowDialog = Windows.Forms.DialogResult.OK Then
    4. player.mediaFile = wahl.FileName
    5. End If
    6. End Sub



    Ich möchte nur das Lied in meiner Listbox anwählen und dann auf Play drücken...
    Dann musst du der Listbox einige Dateien hinzufügen. Hierzu würde ich dir FileInfo Klasse ans Herz legen.

    In der Listbox kannst du dann auf das gewünschte Event reagieren. Jedoch möchtest du ja einen Play Button, dann brauchst du das SelectedIndexChanged Event gar nicht. Sondern das Click Event.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Ja, klick Event der Listbox abbonieren. Gewählte Datei ermitteln und deinem player.mediafile zuweisen.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Wo genau steckst du fest?

    - Abspielen
    - gewähltes Item der Listbox ermitteln
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Nur zur Sicherheit: Keine Strings in die File-Listbox!


    Was ist player.mediafile? Da gibts doch sicher sowas wie player.play, .start oder ähnliches. Musst dir mal die Methoden der Klasse anschauen. Kannst du machen indem du player. eingibst und Intellisence schlägt dir dann alles vor was du da so machen kannst.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @mrMo

    Lade meine Lieder so in die List

    VB.NET-Quellcode

    1. Dim lieder As String = System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) & "\"
    2. Dim a1 As New IO.DirectoryInfo(lieder)
    3. For Each file As FileInfo In a1.GetFiles("musik\*.*", SearchOption.TopDirectoryOnly)
    4. Musikauswahl.Items.Add(file.Name)
    5. Next


    mediafile ist eine Methode vom Player.

    Der Code in meinem 1.Post klappt ja auch
    Also fehlt dir nur noch das ermitteln des gewählten Items?
    Vorausgesetzt player.mediafile spielt die zugewiesene Datei ab, im Click Event der Listbox folgenden Code platzieren:

    Dim sDatei As string = Musikauswahl.Items(Musikauswahl.SelectedIndex).Name (evtl. auch .FullName)
    player.mediafile = sDatei

    oder, da du leider nur Strings in die LB einfügst:
    player.mediafile = Musikauswahl.SelectedItem.ToString()
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Musikauswahl.SelectedItem.ToString() gibt dir das gewählte Item als String. Was steht bei dir da in der Variable drin? Diesen String weist du deinem player.mediafile zu. Danach rufst du player.Play auf.

    Zeig mal deinen aktuellen Code bitte.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @mrMo

    VB.NET-Quellcode

    1. Private Sub Mstart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Mstart.Click
    2. Player.Play()
    3. End Sub
    4. Private Sub Mstop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Mstop.Click
    5. Player.Stop()
    6. End Sub
    7. Private Sub Musikauswahl_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Musikauswahl.SelectedIndexChanged
    8. Dim sDatei As String = Musikauswahl.Items(Musikauswahl.SelectedIndex)
    9. Player.MediaFile = Musikauswahl.SelectedItem.ToString()
    10. End Sub



    und das der originale

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. player.play()
    3. End Sub
    4. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    5. player.pause()
    6. End Sub
    7. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    8. player.stop()
    9. End Sub
    10. Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
    11. player.stop()
    12. End Sub
    13. Private Sub Form1_HandleCreated(sender As Object, e As EventArgs) Handles Me.HandleCreated
    14. player = New MediaPlayer
    15. player.handle = Panel1.Handle
    16. End Sub
    17. Private Sub Panel1_Resize(sender As Object, e As EventArgs) Handles Panel1.Resize
    18. If player IsNot Nothing Then player.resize(Panel1.ClientRectangle)
    19. End Sub
    20. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    21. Dim ofd As New OpenFileDialog
    22. If ofd.ShowDialog = Windows.Forms.DialogResult.OK Then
    23. player.mediaFile = ofd.FileName
    24. End If
    25. End Sub



    So wie du mir den gegeben hat, kommt zu mindest keine fehler Meldung mehr.....passiert nur nix
    Muss mich wohl gerade vertippt haben, bzgl des String Fehlers

    Private Sub Mstart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Mstart.Click

    Player.MediaFile = Musikauswahl.SelectedItem.ToString()
    Player.Play()

    End Sub

    Würde dir empfehlen dich mit den Grundlagen des debugging zu beschäftigen. Habe dazu extra 2 wichtige Links in der Signatur. Schau dir insbesondere das Thema mit den breakpoints und der möglichkeit das Programm in Einzelschritten zu debuggen an.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „mrMo“ ()

    @Otti Kannst Du mal das Projekt anhängen (vorher bereinigen und zippen)?
    Erweiterte Antwort => Dateianhänge => Hochladen.
    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!
    @RodFromGermany

    Das Projekt ist mittlerweile sehr unfangreich, mit vertraulichen ftp Daten usw.
    Hier mal der komplette Code aus der Form, vom Anfang bis ende:

    VB.NET-Quellcode

    1. Imports DirectShow
    2. Imports System.IO
    3. Imports System.IO.Path
    4. Public Class Musikseite
    5. Private WithEvents Player As MediaPlayer
    6. Private Sub Musikseite_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    7. Dim lieder As String = System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) & "\"
    8. Dim a1 As New IO.DirectoryInfo(lieder)
    9. For Each file As FileInfo In a1.GetFiles("musik\*.mp3", SearchOption.TopDirectoryOnly)
    10. Musikauswahl.Items.Add(file.Name)
    11. Next
    12. End Sub
    13. Private Sub MusikSchliessen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MusikSchliessen.Click
    14. Start.Panel.Controls.Clear()
    15. Hauptbild.TopLevel = False
    16. Start.Panel.Controls.Add(Hauptbild)
    17. Hauptbild.Show()
    18. End Sub
    19. Private Sub Form1_HandleCreated(ByVal sender As Object, ByVal e As EventArgs) Handles Me.HandleCreated
    20. Player = New MediaPlayer
    21. End Sub
    22. Private Sub TrackBar_Scroll(ByVal sender As Object, ByVal e As EventArgs) Handles TrackBar.Scroll
    23. Player.Position = New TimeSpan(0, 0, 0, 0, TrackBar.Value)
    24. End Sub
    25. Private Sub Volumen_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Volumen.Scroll
    26. Player.Volume = Volumen.Value
    27. End Sub
    28. Private Sub player_PositionChanged(ByVal sender As Object, ByVal e As EventArgs) Handles Player.PositionChanged
    29. Me.BeginInvoke(Sub()
    30. If Player.State = MediaPlayerState.Stopped Then Exit Sub
    31. TrackBar.Value = CInt(Player.Position.TotalMilliseconds)
    32. Musikdauer.Text = String.Join(" ", Player.Position.ToString("hh\:mm\:ss"), "/", Player.Length.ToString("hh\:mm\:ss"))
    33. End Sub)
    34. End Sub
    35. Private Sub player_started(ByVal sender As Object, ByVal e As EventArgs) Handles Player.Started
    36. Player.Resize(ClientRectangle)
    37. TrackBar.Maximum = CInt(Player.Length.TotalMilliseconds)
    38. TrackBar.Value = 0
    39. Me.Text = "Media Player - " & IO.Path.GetFileNameWithoutExtension(Player.MediaFile)
    40. End Sub
    41. Private Sub player_stopped(ByVal sender As Object, ByVal e As EventArgs) Handles Player.Stopped
    42. Me.BeginInvoke(Sub()
    43. TrackBar.Maximum = 0
    44. TrackBar.Value = 0
    45. Musikdauer.Text = "00:00:00 / 00:00:00"
    46. Me.Text = "Media Player"
    47. End Sub)
    48. Liedweiter()
    49. End Sub
    50. Private Sub Liedweiter()
    51. Musikauswahl.SelectedIndex += 1
    52. End Sub
    53. Private Sub Mstart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Mstart.Click
    54. Player.Play()
    55. End Sub
    56. Private Sub Mstop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Mstop.Click
    57. Player.Stop()
    58. End Sub
    59. Private Sub Musikauswahl_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Musikauswahl.SelectedIndexChanged
    60. Dim ofd As New OpenFileDialog
    61. If ofd.ShowDialog = Windows.Forms.DialogResult.OK Then
    62. Player.MediaFile = ofd.FileName
    63. End If
    64. Laktuelleslied.Text = Musikauswahl.SelectedItem
    65. End Sub
    66. Private Sub Mweiter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Mweiter.Click
    67. Try
    68. Musikauswahl.SelectedIndex += 1
    69. Catch es As Exception
    70. Musikauswahl.SelectedIndex = 0
    71. End Try
    72. End Sub
    73. Private Sub Mzurück_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Mzurück.Click
    74. Try
    75. Musikauswahl.SelectedIndex -= 1
    76. Catch es As Exception
    77. Musikauswahl.SelectedIndex = 0
    78. End Try
    79. End Sub
    80. End Class



    Bisher ist es so das unter Private Sub Musikauswahl_SelectedIndexChanged das Lied über den "Explorer" aus gewählt wird.
    Ich möchte einfach nur das gewünschte Lied mit Private Sub Musikauswahl_SelectedIndexChanged anwählen und dann über Private Sub Mstart_Click starten.

    Mehr eigentlich nicht...Wäre super wenn Ihr mir meine Fehler aufschlüsseln könnte, das ich das endlich mal verstehe.

    Danke im vorraus.
    @Otti Was ist denn da für ein MediaPlayer-Control drinne?
    Was ist DirectShow?
    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!