2014-03-28 63 views
1

我一直在基於ListView的音樂播放器在C#中使用NAudio過去幾天的工作。現在是我開始研究前進/前進功能的時候了,但我在路上遇到了一些問題。我需要選擇listView中的下一個項目。但是,它並未被用戶選中,而是被標記爲現在正在使用默認ListView複選框旁邊的複選標記進行播放。返回ListView中的下一個項目與扭曲

這裏是什麼樣子:

enter image description here

我有一個公共字符串這是由任何訪問;它具有當前正在播放的曲目的文件名。每當我點擊播放曲目,我都有一個foreach循環遍歷這個listView中的所有項目(我在另一個選項卡中有第二個列表視圖,其中包含我點擊播放的所有音樂),如果文件名子項目和當前正在匹配的字符串匹配,然後它檢查它。如果沒有,它取消選中。

我的主類中有一個事件處理程序,用於回放停止在軌道上。將會有什麼進入下一個軌道的邏輯。我有什麼做一個總體思路,但我不知道如何去這樣做

  1. 獲得該項目的指標與複選標記旁邊
  2. 後獲得該項目
  3. 檢索它的文件名子項
  4. 發揮它

那麼將去這樣做的方法是什麼?我仍然有點混淆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; 
     } 
    } 
} 
+0

你能分享你的事件處理?沒有一些代碼很難說。旁註 - 您可以通過使用readonly屬性禁用用戶檢查複選框。 – kmacdonald

+0

現在,事件處理程序只有一些我正在試驗的臨時代碼。即時編輯立即與它 – MrMiketheripper

回答

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. 
      } 


     } 
    } 
} 
+0

看起來像它會工作,但它不但不害怕,我敢肯定這是一個NAudio問題。我會再玩一些。另外,在第二個如果,你的意思是playListView.Items.Count? – MrMiketheripper