我先阐述下问题,我是做了一个音乐播放器。上面添加了timer 初始Enable为true。我在界面上做了播放进度条(trkProgress),
3个Label 分别显示当前播放到的时间(LbPositionTime),
当前播放的歌曲名(SongTitle),
歌曲总长度(lbCountTime)。然后就出现“未将对象引用设置到对象的实例”的错误,起初我认为是timer初始的时候就开始运行,
未能获得axWindowsMediaPlayer1.currentMedia的信息。然后我采用将timer.Enable设置为false,再将歌曲播放后手动启动timer,依然爆出这个异常。求各位懂的高手,大神们讲解。万分感谢!
trkProgress.Maximum = (int)Math.Round(PlayerMainFrm.plm.axWindowsMediaPlayer1.currentMedia.duration, 1);
string title = PlayerMainFrm.plm.axWindowsMediaPlayer1.currentMedia.getItemInfo("title");
这一行代码能正确运行:
LbPositionTime.Text = PlayerMainFrm.plm.axWindowsMediaPlayer1.Ctlcontrols.currentPositionString;
http://msdn.microsoft.com/en-us/library/windows/desktop/dd562388(v=vs.85).aspx
用了MediaChange Event 可以得到总体时间,歌曲名
但是PositionChange Event, 这个事件具体用法能讲解下吗? 这个当前改变应该指的不是播放器自动播放时,能自动触发的事件吧?,这个需要拉快进才能触发的吧?
因为,我在这个事件下的获取当前时间,显示到Label.text中, 设置了断点 程序进不来。你能详细讲解下吗?
但是界面上显示不了。请问,这是什么原因啊。
代码给贴出来了。
private void axWindowsMediaPlayer1_MediaChange(object sender, _WMPOCXEvents_MediaChangeEvent e)
{ PlayerMainFrm.plm.lbCountTime.Text = PlayerMainFrm.plm.axWindowsMediaPlayer1.currentMedia.durationString;
string title = PlayerMainFrm.plm.axWindowsMediaPlayer1.currentMedia.getItemInfo("title");
PlayerMainFrm.plm.trkProgress.Maximum = (int)Math.Round(PlayerMainFrm.plm.axWindowsMediaPlayer1.currentMedia.duration, 1);
PlayerMainFrm.plm.SongTitle.Text = title.Trim();
//PlayerMainFrm.plm.lbCountTime.Visible = true;
// PlayerMainFrm.plm.SongTitle.Visible = true;
//textBox3.Text = PlayerMainFrm.plm.axWindowsMediaPlayer1.currentMedia.getItemInfo("title"); ;
}
private void axWindowsMediaPlayer1_PositionChange(object sender, _WMPOCXEvents_PositionChangeEvent e)
{ PlayerMainFrm.plm.LbPositionTime.Text = PlayerMainFrm.plm.axWindowsMediaPlayer1.Ctlcontrols.currentPositionString;
if ((int)PlayerMainFrm.plm.axWindowsMediaPlayer1.Ctlcontrols.currentPosition <= PlayerMainFrm.plm.trkProgress.Maximum)
{
PlayerMainFrm.plm.trkProgress.Value = (int)PlayerMainFrm.plm.axWindowsMediaPlayer1.Ctlcontrols.currentPosition;
}
}
断点调试时,
lbCountTime.Text
trkProgress.Maximum
SongTitle.Text
都已经取得应有的值,但是在窗体中没有显示。
第二个问题:PositionChange事件,是当当前播放到的位置被改变才触发吧。
怎么用于显示到LbPositionTime中。(我的想法是既然改变才能触发,就在每次开始歌曲刚开始播放的时候自动快进一秒用于触发该事件)。但是第一个问题没有解决,第二个问题看不到效果。
所以恳求高手们,帮帮忙。真的很急啊,后天就要给朋友了。所有基本功能都实现了,就是这点小问题调试一天了。
谢谢帮忙!
谢谢!