返回ListView中的下一个项目

时间:2014-03-28 00:36:52

标签: c# winforms listview naudio

过去几天我一直在使用C#中的NAudio在基于ListView的音乐播放器上工作。现在是我开始研究前进/上一个功能的时候了,但是我在路上遇到了一些障碍。我需要选择listView中的下一个项目。但是,它不是由用户选择的,而是通过默认的ListView复选框旁边的复选标记标记为正在播放。

这就是它的样子:

enter image description here

我有一个可以被任何东西访问的公共字符串;它具有当前播放曲目的文件名。每当我点击播放曲目时,我都会有一个foreach循环遍历此listView中的所有项目(我在另一个标签中有第二个列表视图,其中包含我点击播放的所有音乐)如果文件名subitem和currentPlaying字符串匹配,则检查它。如果没有,则取消选中。

我的主类中有一个事件处理程序,用于播放在轨道上停止的时间。将要进入下一首曲目的逻辑是什么。我已经大致了解该怎么做,但我不确定如何去做

  1. 获取项目的索引,旁边有复选标记
  2. 获取项目后
  3. 检索其fileName子项
  4. 播放
  5. 那么这样做的方法是什么?我还是对listViews等感到困惑。

    更新另外,如何禁用用户选中复选框,我是否可以在双击时将其删除但是用户何时该怎么做?检查复选框本身?

    更新2:以下是我正在处理的一些临时代码的事件处理程序

    public void waveOutDevice_PlaybackStopped(object sender, StoppedEventArgs e)
    {
        string fileName;
        foreach (ListViewItem lvi in playListView.Items)
        {
            fileName = lvi.SubItems[1].Text;
            if(lvi.Checked == true)
            {
                int finIndex;
                lvi.Checked = false;
                finIndex = lvi.Index;
                //finIndex + 1;
            }
        }
    }
    

1 个答案:

答案 0 :(得分:1)

我认为你就是在那里。所有你需要做的就是这样:

public void waveOutDevice_PlaybackStopped(object sender, StoppedEventArgs e)
{
    string fileName;
    foreach (ListViewItem lvi in playListView.Items)
    {
        fileName = lvi.SubItems[1].Text;
        if(lvi.Checked == true)
        {
            int finIndex;
            lvi.Checked = false;
            finIndex = lvi.Index;
            finIndex++;
            if(finIndex < playListView.Count())
            {
                var nextGuy = playListView.Items[finIndex];
                nextGuy.Checked = true;
                //Play the file and what not. 
            }


        }
    }
}