2012-02-03 102 views
2

好吧,我有问题,我让这个代码播放列表框上列出的项目axmediaplayer。 第一我让这段代码使用opendialog做一个列表:如何使用axmediaplayer播放播放列表中的下一个项目?

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]); 
      } 
     } 
    } 

,然后在列表框索引使用此代码改变(当在列表框中的项目cliked)播放音乐:

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; 
     } 
    } 
} 

选定的指数变化,但球员没有自动播放下一首歌曲。我必须手动点击播放按钮才能播放列表。任何人都可以帮助我吗?

+0

其中i列表框是你正在选择的项目..?你有多少网址可供选择......如果你点击列表中的最后一个网址,会发生什么......你会得到一个错误..?如果你正在检查e.newState,你还可以得到一个e.SeletedItem它的索引listBox1.SelectedIndex = e.SelectedIndex; – MethodMan 2012-02-03 15:15:59

+0

@Scott - thx for ur commend,我使用opendialog获取列表框项目,然后将结果转换为数组路径(也许我还必须写我如何获得列表框?)。是的,当最后一个名单被选中时,它已经崩溃了。我知道这个时候,当你打到最后一个名单+1时,你什么也没玩。我不知道你最后一个问题的意思是 – Cero 2012-02-03 20:52:40

+0

只是修复了最后一个代码,现在它不会在列表中的最后一个项目时崩溃。 – Cero 2012-02-04 05:44:07

回答

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;    
     }    
    } 

然后在计时器我添加Tick事件,Tick事件是这样的:

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; 
     }    
    }  

现在它的做工精细^^

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; 
    }  
相关问题