2

質問があります。リストボックスにリストされているアイテムに基づいてaxmediaplayerを再生するためにこのコードを作成しました。まず、opendialogを使用してリストを作成するために、このコードを作成します。

 private string[] files, path;
 private void button1_Click(object sender, EventArgs e)
    {
        if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            files = openFileDialog1.SafeFileNames;
            path = openFileDialog1.FileNames;
            for (int i = 0; i < files.Length; i++) {
                listBox1.Items.Add(files[i]);
            }
        }
    }

次に、次のコードを使用して、リストボックスのインデックスが変更されたとき(リストボックスの項目が気に入ったとき)に音楽を再生します。

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    axWindowsMediaPlayer1.URL = path[listBox1.SelectedIndex];
}

それはうまく機能し、それから私はプレーヤーが私のリストボックスのアイテムの次の曲ベースに自動移動することを望みます。イベントPlayStateChangeを使用して、このコードを作成します

private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
    if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsMediaEnded) 
    {
         if(listBox1.SelectedIndex < files.Length - 1)
         {
            listBox1.SelectedIndex = listBox1.SelectedIndex + 1;
         }
    }
}

選択したインデックスは変更されますが、プレーヤーは次の曲を自動再生しません。リストを再生するには、手動で再生ボタンをクリックする必要があります。誰かが私を助けることができますか?

4

2 に答える 2

2

わかりました。解決策は、次の曲を再生する前にタイマーを追加することです。最初にタイマーを追加します。それは timer1 である必要があります。そして、playstate イベントを次のように変更します。

private void axWindowsMediaPlayer1_PlayStateChange(object sender, axWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
    {
        if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsMediaEnded)
        {
            timer1.Interval = 100;
            timer1.Enabled = true;               
        }            
     }

次に、タイマーでティックイベントを追加すると、ティックイベントは次のようになります。

 private void timer1_Tick(object sender, EventArgs e)
    {
        if (listBox1.SelectedIndex < files.Length - 1)
        {
            listBox1.SelectedIndex++;
            timer1.Enabled = false;
        }
        else
        {
            listBox1.SelectedIndex = 0;
            timer1.Enabled = false;
        }            
    }       

これで問題なく動作します^^

于 2012-02-28T16:09:55.057 に答える
0

以下の機能は私のために働いた

    private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
    {
        if ((WMPLib.WMPPlayState)e.newState == WMPLib.WMPPlayState.wmppsMediaEnded)
        {

            timer1.Interval = 100;
            timer1.Start();
            timer1.Enabled = true;   
            timer1.Tick += timer1_Tick;
        }
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        /// method to play video list items
        myFuntiontoPlayVideo();
        timer1.Enabled = false;
    }     
于 2016-08-09T11:38:39.087 に答える