Хранение пути к файлу в списке - PullRequest
0 голосов
/ 23 октября 2011

Я делаю приложение музыкального плеера. Я использую ListBox для отображения песен. Когда пользователь добавляет песню, он отображает полный путь песни. Но я хочу, чтобы он отображал только название песни (песни могут быть расположены в любой папке на любом диске). Windows Media Player управления играет песни. Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 24 октября 2011

Я бы сделал это примерно так:
1. Создайте объект, который может содержать информацию о песне.
2. Создайте список, содержащий все песни в списке воспроизведения.
3. Добавьте этот список в качестве источника данных в список. Установив .DisplayMember, вы сообщаете, какое свойство будет отображаться как listitemtext в списке.
4. Когда listindex изменится, получите объект, сохраненный в listbox.SelectedItem, и введите его в объект песни для работы с ним.

Public Class Form1

Structure SongObject
    Public SongPath As String
    Public NameNoExtension As String
    Public SongLength As Integer
    Public SongRating As Integer
    Private _FileName
    Public Property FileName() As String
        Get
            Return _filename
        End Get
        Set(ByVal value As String)
            _FileName = value
        End Set
    End Property

    Public Sub New(ByVal path As String)
        SongPath = path
        FileName = IO.Path.GetFileName(path)
        NameNoExtension = IO.Path.GetFileNameWithoutExtension(path)
        SongLength = 0 'fix
        SongRating = 5 'fix
    End Sub

End Structure

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim musicpath As String = "C:\Users\Public\Music\Sample Music\"

    'Load songs into listbox
    ListBox1.DisplayMember = "FileName"
    Dim songs As New List(Of SongObject)
    For Each f As String In IO.Directory.GetFiles(musicpath, "*.mp3")
         songs.Add(New SongObject(f))
    Next
    ListBox1.DataSource = songs
End Sub

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
    'Get songitem
    Dim SelectedSong As SongObject = CType(ListBox1.SelectedItem, SongObject)
    MsgBox("Path:" & SelectedSong.SongPath & vbCrLf & "FileName:" & SelectedSong.FileName)
    'Todo: play selected song...
End Sub
End Class

Используйте IO.Path.GetFileName (путь) и IO.Path.GetFileNameWithoutExtension (путь), чтобы получить имя файла вместо right / left / instr / mid и так далее.

0 голосов
/ 24 октября 2011

Итак, вы хотите извлечь только название песни из всего пути песни. Простая хитрая логика сделает это. Это VBA

sub song_name_extractor()
    song_path = "c:\songs\favret\mylove.mp3" ' Assume this is where the song is
    song_name = Right(song_path, Len(song_path) - InStrRev(song_path, "\"))
    Msgbox song_name  'outputs mylove.mp3 
    song_name = Left(song_name, InStrRev(song_name, ".") - 1)
    Msgbox song_name ' outputs only mylove removes extensions of file
end sub

Explaination:

Right Func, cuts the right part of the string into sub-string of given number
Len Func, To find the length of the string
InStrRev Fun, gives the point of occurrence, of the given character in a string
searching from right to left 
Left Func, cuts the Left part of the string into sub-string of given number
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...