0

ここでは 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;
            }          

        }

また、ユーザーが単一の曲を選択して再生すると、機能します。ユーザーが現在のプレイリストに曲を追加することにした場合、選択した曲は再生されず、同じエラーが表示されます。「Clear List」をクリックして新しい曲を選択すると、機能します。

私のコードについてのあなたの考えを教えてください。私はまだ初心者で、オンラインで見たコードのいくつかを理解するのが難しいと感じています。ハハ。プレイリストの保存とプレイリストの作成ボタンを機能させたいだけです。ありがとう。

4

1 に答える 1

1

する前に

xWindowsMediaPlayer1.URL = paths[lbPlaylist.SelectedIndex]; 

selectedIndex が実際にパスに存在することを確認してください

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

これは少なくともデバッグに役立つはずです。ブレークポイントをどこかに置いて、パスの値を確認することをお勧めします。初期化または追加を正しく行っていない可能性があるため、存在しない配列内のエントリにアクセスしようとしています。

于 2016-06-28T20:31:43.187 に答える