2016-06-27 45 views
0

初學者使用C#編碼。我建立了一個媒體播放器,允許管理員創建和保存播放列表。客人應該能夠加載播放列表並在所述播放列表上播放歌曲。不幸的是,每當客人加載創建的播放列表時,嘗試播放播放列表中的任何歌曲時都會彈出錯誤消息。它似乎只加載路徑細節,但不是實際的媒體。C#使用列表框創建,保存和播放播放列表

「類型‘System.IndexOutOfRangeException’的未處理的異常發生在WindowsFormsApplication1.exe

其他信息:索引陣列的邊界之外。」

這是在列表框中的代碼,我有:

axWindowsMediaPlayer1.URL = paths[lbPlaylist.SelectedIndex]; 

的代碼下面的代碼是在「創建播放列表」按鈕編碼:

private void btnCreate_Click(object sender, EventArgs e) 
{ 
     OpenFileDialog newPlaylist = new OpenFileDialog(); 
     newPlaylist.InitialDirectory = "C:\\Users\\mklsingh\\Documents\\Visual Studio 2013\\Projects\\Media Player\\WindowsFormsApplication1\\Media Files"; 
     newPlaylist.Filter = "MP3 Audio File (*.mp3)|*.mp3| Windows Media File (*.wma)|*.wma|WAV Audio File (*.wav)|*.wav|All Files (*.*)|*.*"; 
     newPlaylist.RestoreDirectory = false; 
     newPlaylist.Multiselect = true; 
     if (newPlaylist.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
     { 
      files = newPlaylist.SafeFileNames; 
      paths = newPlaylist.FileNames; 
      for (int list = 0; list < files.Length; list++) 
      { 
        lbPlaylist.Items.Add(files[list]); 
      } 
     } 
} 

下面的代碼保存播放列表作爲XML文件:

private void btnSave_Click(object sender, EventArgs e) 
{ 
     StreamWriter Write; 
     SaveFileDialog savePlaylist = new SaveFileDialog(); 
     savePlaylist.RestoreDirectory = false; 
     try 
     { 
      savePlaylist.InitialDirectory = "C:\\Users\\mklsingh\\Documents\\Visual Studio 2013\\Projects\\Media Player\\WindowsFormsApplication1\\Media Files\\Playlist"; 
      savePlaylist.Filter = ("XML File|*.xml|All Files|*.*"); 
      savePlaylist.ShowDialog(); 
      Write = new StreamWriter(savePlaylist.FileName); 
      for (int I = 0; I < lbPlaylist.Items.Count; I++) 
      { 
        Write.WriteLine(lbPlaylist.Items[I]); 
      } 
      Write.Close(); 
      MessageBox.Show("Playlist saved!"); 
     } 

     catch //(Exception ex) 
     { 
       return; 
     } 
} 

下面的代碼加載保存的XML播放列表文件:

private void btnLoad_Click(object sender, EventArgs e) 
     { 


      OpenFileDialog loadPlaylist = new OpenFileDialog();  
      loadPlaylist.Multiselect = false; 

      this.lbPlaylist.Items.Clear(); 

      try 
      { 
       loadPlaylist.ShowDialog(); 
       loadPlaylist.InitialDirectory = "C:\\Users\\mklsingh\\Documents\\Visual Studio 2013\\Projects\\Media Player\\WindowsFormsApplication1\\Media Files\\Playlist"; 
       //txtLoad.Text = loadPlaylist.Filename; 
       StreamReader playlist = new StreamReader(loadPlaylist.FileName); 

       while (playlist.Peek() >= 0) 
        lbPlaylist.Items.Add(playlist.ReadLine()); 
        txtLoad.Text = loadPlaylist.FileName; 
      } 

      catch 
      { 
       return; 
      }   

     } 

此外,如果用戶選擇一首歌曲並播放它,它將起作用。如果用戶決定在當前播放列表上添加歌曲,則所選歌曲將不會播放,並且會彈出相同的錯誤。如果我點擊「清除列表」並選擇一首新歌曲,它仍然可以工作。

請讓我知道你對我的代碼的想法。我仍然是初學者,我發現很難理解我在網上看到的一些代碼。哈哈。只想使我的保存播放列表和創建播放列表按鈕的工作。謝謝。

+0

首先,您可以檢查以確保您嘗試訪問的索引存在。 if(lbPlaylist.SelectedIndex nastassiar

+0

這個if語句應該放在列表框中?對不起,這裏真的很新鮮。 –

回答

0

在你做

xWindowsMediaPlayer1.URL = paths[lbPlaylist.SelectedIndex]; 

檢查以確保的selectedIndex實際路徑存在

if (lbPlaylist.SelectedIndex < paths.Length) 
{ 
    xWindowsMediaPlayer1.URL = paths[lbPlaylist.SelectedIndex]; 
} 
else 
{ 
    // Display an error? 
} 

調試這至少應該幫助你,我會建議把一個破發點的地方,並檢查,看看路徑的價值是什麼。有可能你沒有初始化或添加它,所以你試圖訪問數組中不存在的條目。

+0

感謝您的回覆。這段代碼實際上幫了我。當我選擇一個媒體時,它播放。在播放時,我嘗試添加另一首歌曲,添加後,我嘗試播放加載的第一首歌曲下方的歌曲,錯誤彈出。它似乎只能替換列表框中的第一個項目,即使它顯示的是文件名。 那麼,我試圖調試我的程序,仍然吮吸它。看來我保存的文件只保存「文件名」,加載時沒有任何價值。這裏的問題可能是用於保存,選擇和加載播放列表按鈕的代碼。你怎麼看? –

+0

我對所有這些列表和數組的結構感到困惑。 lbPlaylist是一個字符串數組嗎?也許給你的代碼添加一些註釋?什麼是「files = newPlaylist.SafeFileNames;」和「paths = newPlaylist.FileNames;」 – nastassiar