2016-06-27 42 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