Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays visualbasic-列表索引问题_Arrays_Vb.net_Listview - Fatal编程技术网

Arrays visualbasic-列表索引问题

Arrays visualbasic-列表索引问题,arrays,vb.net,listview,Arrays,Vb.net,Listview,所以我的问题是:我使用两个列表视图创建一个“自动存储塔”,双击其中一个,它会将信息添加到另一个列表视图。此外,它还将相关的mp3信息添加到一个数组中。Windows Media Player将使用此阵列背靠背播放歌曲 不知何故,我成功地将正确的信息传输到第二个listview(lvTrackList)中,但在双击第二行或第三行信息后,第一次双击的相同信息会通过If语句返回。我的阵列开始间隔曲目(例如,在添加三首歌曲后,阵列显示前两个点为0,第三个槽为选定的第一首歌曲)。。。请帮忙

所以我的问题是:我使用两个列表视图创建一个“自动存储塔”,双击其中一个,它会将信息添加到另一个列表视图。此外,它还将相关的mp3信息添加到一个数组中。Windows Media Player将使用此阵列背靠背播放歌曲

不知何故,我成功地将正确的信息传输到第二个listview(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

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

为了有希望地回答您的问题,这句话:

currentSong = lvQueueList.Items(0).Text
始终抓取第二个列表视图中的第一项,因此它将始终将该歌曲的mp3加载到currentSong变量中

要从不显示任何内容中删除queueArray项,您不能简单地重新分配数组。您需要重拨以保留阵列,然后将其添加到阵列的末尾。这样,您可以将当前项保留在数组中,只需添加到末尾

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

请至少显示
songsArray
queueArray
queueCount
的定义。显然,您必须摆脱检查“currentSong”的糟糕代码。那只会增加什么。您添加的项不是lvQueueList。项(0)是在末尾添加的。已编辑。。。我已经添加了songsArray之类的信息,但是正如您所看到的,queueArray和queueCount并没有什么特别之处。