2016-06-27 4 views
0

초보자를 C#으로 코딩합니다. 관리자가 재생 목록을 만들고 저장할 수있는 미디어 플레이어를 만들었습니다. 손님은 재생 목록을로드하고 상기 재생 목록에서 노래를 재생할 수 있어야합니다. 불행하게도 게스트가 만든 재생 목록을로드 할 때마다 재생 목록에있는 노래를 재생할 때 오류가 발생합니다. 실제 미디어가 아닌 경로 세부 정보 만로드하는 것 같습니다. ListBox를 사용하여 재생 목록 만들기, 저장 및 재생

는 "타입"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; 
      }   

     } 

또한 사용자가 하나의 노래를 선택하여 재생하면 작동합니다. 사용자가 현재 재생 목록에 노래를 추가하기로 결정하면 선택한 노래가 재생되지 않고 동일한 오류가 나타납니다. "목록 지우기"를 클릭하고 새 노래를 선택하면 제대로 작동합니다.

제 코드에 대한 여러분의 생각을 알려주세요. 나는 아직 초보자이며 온라인에서 볼 수있는 일부 코드를 이해하기가 어렵습니다. 하하. Save Playlist와 Create Playlist 버튼을 만들고 싶습니다. 감사.

+0

시작하려면 액세스하려는 색인이 있는지 확인하십시오. if (lbPlaylist.SelectedIndex nastassiar

+0

if 문을 목록 상자에 배치해야합니까? 미안, 정말로 초보자. –

답변

0

당신은 확실히 selectedIndex의 실제 경로에 어디 선가 브레이크 포인트를 넣고 확인 검사를 제안 디버깅

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

이해야 적어도 도움을 존재하게

xWindowsMediaPlayer1.URL = paths[lbPlaylist.SelectedIndex]; 

확인 할 전에 경로의 가치는 무엇인가. 존재하지 않는 배열의 항목에 액세스하려고하므로 초기화하거나 추가하지 않았을 가능성이 큽니다.

+0

답장을 보내 주셔서 감사합니다. 이 코드는 실제로 나를 도왔다. 단일 미디어를 선택하면 해당 미디어가 재생됩니다. 연주하는 동안 다른 노래를 추가하려고합니다. 추가 할 때 첫 번째 노래가로드 된 노래 아래에서 노래를 재생하려고했는데 오류가 발생합니다. 파일 이름을 표시하고 있지만 목록 상자의 첫 번째 항목 만 바꿉니다. 글쎄, 내 프로그램을 디버깅하려고했는데, 여전히 그걸 빨아 들였다. 그것은 내가 저장 한 파일은 "Filename"만 저장하는 것으로 보이며,로드 될 때 아무런 가치가 없습니다. 여기서 문제는 아마도 내 저장, 선택 및 재생 목록로드 버튼에 대한 코드 때문일 수 있습니다. 너는 무엇을 생각하니? –

+0

이 목록과 배열의 구조가 무엇인지 혼란스러워합니다. lbPlaylist가 문자열 배열입니까? 코드에 주석을 추가 할 수 있습니까? "files = newPlaylist.SafeFileNames;"란 무엇입니까? 및 "paths = newPlaylist.FileNames;" – nastassiar

관련 문제