Visual Basic - ListIndex问题

时间:2013-08-25 20:52:25

标签: arrays vb.net listview

所以这是我的问题:我正在使用两个列表视图创建一个“点唱机”,双击一个,然后将信息添加到另一个列表视图。此外,它还将相关的mp3信息添加到数组中。 Windows Media Player将使用此阵列背靠背播放歌曲。

不知何故,我成功地将正确的信息转移到第二个列表视图(lvTrackList),但是在我双击第二行或第三行信息后,第一次双击的相同信息将通过If返回声明。我的阵列开始间隔轨道(例如,在添加三首歌曲后,阵列说前两个点是0,第三个插槽是第一首被选中的歌曲)...请帮助!!!

        Dim songsArray() As String = {"FurryLewis-BillyLyonsAndStackolee.Mp3", "GusCannon-PoorBoyALongWayFromHome.Mp3", "JoeMcCoy-PileDriverBlues.Mp3", "LouisArmstrong-ComeBack,SweetPapa.mp3"}
        Dim queueArray() As String              'Queue for Playlist, containing songnames
        Dim queueCount As Integer = 0                   'Count for queueArray


'DoubleClick track playlist to add selected track to Queue
Private Sub lvTrackList_DoubleClick(ByVal sender As System.Object,
                          ByVal e As System.EventArgs) Handles lvTrackList.DoubleClick

    intCurrentSong = lvTrackList.SelectedIndices(0)
    lvQueueList.Items.Add(lvTrackList.Items(lvTrackList.SelectedIndices(0)).Clone())

    'determine applicable mp3 file
    currentSong = lvQueueList.Items(0).Text
    If currentSong = "Billy Lyons and Stackolee" Then
        newSong = songsArray(0)
    ElseIf currentSong = "Gus Cannon" Then
        newSong = songsArray(1)
    ElseIf currentSong = "Kansas Joe McCoy" Then
        newSong = songsArray(2)
    ElseIf currentSong = "Louis Armstrong" Then
        newSong = songsArray(3)
    End If

    'add file to queueArray for appending to WindowsMediaPlayer playlist
    ReDim queueArray(queueCount)
    queueArray(queueCount) = newSong

    queueCount += 1

End Sub

1 个答案:

答案 0 :(得分:0)

首先,除非有特定的理由使用数组编写代码,否则我建议创建一个包含歌曲标题和mp3路径的对象,然后将这些项加载到列表中。

希望能回答你的问题:

currentSong = lvQueueList.Items(0).Text

总是抓住第二个列表视图中的第一个项目,因此它总是将该歌曲的mp3加载到currentSong变量中。

要删除queueArray项以不显示任何内容,您不能简单地重新调整数组。您需要ReDim保留数组,然后添加到数组的末尾。这样,您可以将当前项目保留在数组中,只需添加到最后。

ReDim Preserve queueArray(UBound(queueArray) + 1)
queueArray(queueCount) = newSong
queueCount += 1

MSDN Redim with Preserve