【发布时间】:2012-02-03 14:58:59
【问题描述】:
好的,我有问题,我制作了这段代码来根据列表框中列出的项目播放 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;
}
}
}
所选索引发生变化,但播放器不会自动播放下一首歌曲。我必须手动单击播放按钮才能播放列表。谁能帮帮我?
【问题讨论】:
-
您选择的项目在列表框中的哪个位置..?您必须从多少个 URL 中进行选择。如果您单击列表中的最后一个 URL,会发生什么情况。您会收到错误信息吗?如果你正在检查 e.newState 你也能得到一个 e.SeletedItem 它的索引 listBox1.SelectedIndex = e.SelectedIndex;
-
@Scott - 感谢您的推荐,我使用 opendialog 获取列表框项目,然后将结果转换为数组路径(也许我还必须写下如何获取列表框?)。是的,当最后一个列表被选中时它崩溃了我知道这是因为当你点击最后一个列表时 + 1 你没有什么可玩的。我不确定你最后一个问题是什么意思
-
只修复最后一个代码,现在当列表命中最后一项时它不会崩溃。
-
我发现了一些东西,当我检查我的 if 语句时,我使用 mbox 来检查语句是否触发(我将 mbox 放在 listBox1.SelectedIndex = listBox1.SelectedIndex + 1;)所以如果语句fire my mbox 会弹出。当歌曲结束时它会弹出,然后发生一些事情,下一首歌曲就像我想要的那样播放,但是当我关闭 mbox 时它又停止了。奇怪-_-
-
你确定你没有任何其他可能触发某些事件的连接事件.. 还有任何设置是你的媒体代码中的 MediaPlayer