实例介绍
【实例简介】
【实例截图】
需要启用 Windows Media Player 功能,否则会提示【System.Runtime.InteropServices.COMException:“没有注册类】
操作步骤:控制面板>>程序>>启用或者关闭windows 功能>>选中 媒体功能>>Windows Media Player,点击确定即可
【核心代码】
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Collections; using System.IO; using System.Runtime.Serialization.Formatters.Binary; using System.Configuration; using System.Media; namespace 音乐播放器 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } #region 窗体加载事件 加载内容 private void Form1_Load(object sender, EventArgs e) { #region 设置默认播放列表 Directory.CreateDirectory(@"d:\cloud"); //建立默认文件夹 FileInfo fi = new FileInfo(@"d:\cloud\info.list"); //声明文件对象 if (fi.Exists && fi.Length > 0) //判断是否存在默认文件并且文件不为空 { Read(@"d:\cloud\info.list"); //读取默认路径的文件 } #endregion } #endregion #region 调用方法 #region 把文件添加到列表中 public static int count = 1; //把选中歌曲内容加到列表中方法 public void SetPlayList(string[] s) { string strType = "mp3|mp4|wma"; ArrayList list = new ArrayList(); //遍历字符串数组s foreach (string lis in s) { //从路径lis中截取出歌曲的后缀名 string str = lis.Substring(lis.LastIndexOf(".") 1);//取点后边的字符串 //将后缀名类型以'|'分割成字符串数组 string[] st = strType.Split('|'); //将歌曲的后缀名分别与给出的类型配对 foreach (string stt in st) { if (str == stt) { //声明一个WMPLib.IWMPMedia的对象media,该对象可以添加到播放器的播放清单中 WMPLib.IWMPMedia media = this.axWindowsMediaPlayer1.newMedia(lis); //添加到播放器的播放清单中 this.axWindowsMediaPlayer1.currentPlaylist.appendItem(media); //按顺序播放清单中的文件 this.axWindowsMediaPlayer1.Ctlcontrols.play(); //初始化一个ListViewItem类型的实例 ListViewItem item = new ListViewItem(); string name = Path.GetFileName(lis); string[] sna = name.Split('.');//将歌曲名以“.”分割成名字和后缀名 item.Text = "" count;//取序号 //把播放的歌曲信息添加到播放列表中 item.SubItems.Add(sna[0]);//取名字部分 item.SubItems.Add(lis);//取地址 listView1.Items.Add(item);//把每一个子项添加到项中 count ;//每添加一项后序号 1 } } } } #endregion /// <summary> /// 读取列表 /// </summary> /// <param name="path">用户选择的读取列表路径</param> private void Read(string path) { StreamReader sr = new StreamReader(path); //声明写读对象 int i = 1; //声明变量为listview列表序号赋值 int n = path.LastIndexOf('.'); //获取文件名最后一次出现"."的索引 if (path.Substring(n, path.Length - n) == ".list") //判断文件的格式是否为“.list” { this.listView1.Items.Clear(); //清空listview列表 this.axWindowsMediaPlayer1.currentPlaylist.clear(); //清空播放器列表 while (true) //循环写入列表中的文件 { string s = sr.ReadLine(); //接受读取的字符串,实际上是歌曲的地址 if (s == null) //判断是否读取完成,如果读完就跳出循环 { break; } WMPLib.IWMPMedia me = this.axWindowsMediaPlayer1.newMedia(s);//声明播放文件对象 this.axWindowsMediaPlayer1.currentPlaylist.appendItem(me); //把播放文件对象添加到播放器列表中 this.axWindowsMediaPlayer1.Ctlcontrols.play(); //播放器按顺序播放歌曲 List(s, i); //使用listview列表方法与播放器列表同步 i ; //序号变量自加1 } sr.Close(); //关闭读文件流 } else { sr.Close(); MessageBox.Show("请选择正确的文件格式:“.list格式”"); } } /// <summary> /// 保存列表 /// </summary> /// <param name="path">用户选择的保存列表路径</param> private void Write(string path) { StreamWriter sw = new StreamWriter(path); //指定文件的写入路径 foreach (ListViewItem l in listView1.Items) //循环比例listview列表 { sw.WriteLine(l.SubItems[2].Text); //获得列表中的每个歌曲的地址并写入文件 } sw.Close(); //关闭文件写入 } /// <summary> /// 判断播放文件颜色变红 /// </summary> private void songColor() { string playSong = this.axWindowsMediaPlayer1.currentMedia.sourceURL; //获取播放文件的地址 foreach (ListViewItem l in listView1.Items) //遍历listview中的文件地址 { if (l.SubItems[2].Text == playSong) //如果文件地址和播放文件地址相同就改变颜色 { listView1.Items[l.Index].ForeColor = Color.Red; } else { listView1.Items[l.Index].ForeColor = Color.Blue; //如果不同就为默认色 } } } /// <summary> /// 播放器列表同步至Listview列表 /// </summary> /// <param name="path">文件路径数组</param> private void List(string path, int i) { ListViewItem liv = new ListViewItem(i.ToString()); //声明ListViewItem对象并为其复制 this.listView1.Items.Add(liv); //为序号赋值 int n = path.LastIndexOf(@"\"); //截取文件名字的索引位置 liv.SubItems.Add(path.Substring(n 1)); //添加文件名字到列表 liv.SubItems.Add(path); //添加文件地址到列表 } /// <summary> /// 添加文件并同步播放 /// </summary> /// <param name="path">打开文件的路径</param> private void OpenFiles(string[] path) { axWindowsMediaPlayer1.currentPlaylist.clear(); //清空播放器内部的播放列表 listView1.Items.Clear(); //清空ListView列表 int i = 1; //设定变量来改变ListView的序号 foreach (string s in path) //遍历打开文件的地址数组 { WMPLib.IWMPMedia me = this.axWindowsMediaPlayer1.newMedia(s); //声明一个播放器列表对象 this.axWindowsMediaPlayer1.currentPlaylist.appendItem(me); //把地址添加进播放器列表 this.axWindowsMediaPlayer1.Ctlcontrols.play(); //播放器按列表顺序播放文件 List(s, i); //把播放文件同步到ListView列表 i ; //序号加一 } } #endregion #region 打开文件 private void toolStripMenuItem1_Click(object sender, EventArgs e)//打开文件 { openFileDialog1.InitialDirectory = @"d:\cloud"; //设定文件打开默认路径 DialogResult file = openFileDialog1.ShowDialog(); //声明选择文件对话框选择结果的对象 if (file == System.Windows.Forms.DialogResult.OK) //如果点击OK则进行下一步,反之无操作 { string[] strPath = openFileDialog1.FileNames; // 声明数组变量接受选择文件的路径可以是多个文件 OpenFiles(strPath); //把选择的文件路径带入OpenFiles方法 } } #endregion private void toolStripMenuItem2_Click(object sender, EventArgs e)//添加文件 { //打开对话框并获得结果 OpenFileDialog op = new OpenFileDialog(); //设置可多选 op.Multiselect = true; DialogResult dr = op.ShowDialog(); //判断是否为“打开” if (dr == DialogResult.OK) { //清空播放器中播放列表 string[] files = op.FileNames; SetPlayList(files);//将文件加到列表中 } } private void toolStripMenuItem3_Click(object sender, EventArgs e)//打开文件夹 { DialogResult dic = folderBrowserDialog1.ShowDialog(); //声明选择文件夹对话框选择结果对象 if (dic == System.Windows.Forms.DialogResult.OK) //如果点击OK进行下一步,反之无操作 { string[] dicFiles = Directory.GetFiles(folderBrowserDialog1.SelectedPath);//声明数组变量接受选择文件夹中的文件的路径 OpenFiles(dicFiles); //获得的文件路径变量带入OpenFile方法 } } private void toolStripMenuItem4_Click(object sender, EventArgs e)//打开列表 { DialogResult file = openFileDialog1.ShowDialog(); //声明文件对话框选择结果对象 if (file == System.Windows.Forms.DialogResult.OK) //判断选择结果是否为OK { string path = openFileDialog1.FileName; //接收文件名 Read(path); } } private void toolStripMenuItem5_Click(object sender, EventArgs e)//保存列表 { SaveFileDialog save = new SaveFileDialog(); //声明保存文件对话框选择对象 save.Filter = "列表格式|.list"; //设定保存文件的格式 save.InitialDirectory = @"d:\cloud"; //设定保存文件的默认路径 if (save.ShowDialog() == DialogResult.OK) //判断对话框选择结果是否是OK { Write(save.FileName); //把文件路径带入到方法中 } } private void toolStripMenuItem6_Click(object sender, EventArgs e)//清空列表 { this.listView1.Items.Clear(); //清空listview列表 this.axWindowsMediaPlayer1.currentPlaylist.clear(); //清空播放器列表 } private void toolStripMenuItem7_Click(object sender, EventArgs e)//播放 { this.axWindowsMediaPlayer1.Ctlcontrols.play(); //播放文件 songColor(); //判断播放文件并改变颜色 } private void toolStripMenuItem8_Click(object sender, EventArgs e)//暂停 { this.axWindowsMediaPlayer1.Ctlcontrols.pause(); //播放器暂停 } private void toolStripMenuItem9_Click(object sender, EventArgs e)//静音 { this.axWindowsMediaPlayer1.settings.volume = 0; } private void toolStripMenuItem10_Click(object sender, EventArgs e)//停止播放 { this.axWindowsMediaPlayer1.Ctlcontrols.stop(); } private void toolStripMenuItem11_Click(object sender, EventArgs e)//上一首 { this.axWindowsMediaPlayer1.Ctlcontrols.previous(); songColor(); } private void toolStripMenuItem12_Click(object sender, EventArgs e)//下一首 { this.axWindowsMediaPlayer1.Ctlcontrols.next(); songColor(); } private void toolStripMenuItem13_Click(object sender, EventArgs e) { if (listView1.SelectedItems.Count > 0) { ListViewItem liv = listView1.SelectedItems[0]; //声明ListView对象接受 int index = liv.Index; //接受选择文件的索引 string path = axWindowsMediaPlayer1.currentMedia.sourceURL; //接受正在播放文件的路径 liv.Remove(); //移除ListView中选中的文件 WMPLib.IWMPMedia me = axWindowsMediaPlayer1.currentPlaylist.get_Item(index);//根据索引获得播放器列表中对应的对象 axWindowsMediaPlayer1.currentPlaylist.removeItem(me); //删除播放列表中的对象 if (liv.SubItems[2].Text == path) //判断删除的文件是否正在播放的文件 { axWindowsMediaPlayer1.Ctlcontrols.play(); //重新按播放器列表播放文件 //改变播放文件的颜色 } int i = 1; //变量为ListView序号赋值 foreach (ListViewItem l in listView1.Items) //遍历listview { l.Text = i.ToString(); //为listview序号改值 i ; } } } private void toolStripMenuItem6_Click_1(object sender, EventArgs e) { this.listView1.Items.Clear(); //清空listview列表 this.axWindowsMediaPlayer1.currentPlaylist.clear(); //清空播放器列表 } private void 帮助ToolStripMenuItem_Click(object sender, EventArgs e) { Help2 he2 = new Help2(); //建立一个Form框并声明一个对象 he2.Show(); //弹出form框 } private void toolStripMenuItem14_Click(object sender, EventArgs e) { if (listView1.SelectedItems.Count > 0) //判断选择项不为空 { int index = listView1.SelectedItems[0].Index; //获取选择项的索引 //获取播放器里面对应索引的文件并播放 this.axWindowsMediaPlayer1.Ctlcontrols.playItem(this.axWindowsMediaPlayer1.currentPlaylist.get_Item(index)); //改变播放歌曲的颜色 } else { MessageBox.Show("请选中要操作的文件"); } } private void toolStripMenuItem16_Click(object sender, EventArgs e) { if (listView1.SelectedItems.Count > 0) //判断是否有选择项 { string file = this.listView1.SelectedItems[0].SubItems[2].Text; //提取选择项的路径 Help he = new Help(file); //另外建立一个Form 并声明对象 对构造函数传路径 he.ShowDialog(); //显示对象所属的Form框(除了对话框不能做任何操作) } else { MessageBox.Show("请选中要查看的文件"); //如果没有选中文件弹出对话框提示选择文件 } } private void listView1_DoubleClick(object sender, EventArgs e) { if (listView1.SelectedItems.Count > 0) //判断是否有选择项 { ListViewItem liv = listView1.SelectedItems[0]; //因为只能选一个,所以就是数组中的第一个元素 int index = liv.Index; //接收元素在列表中的索引 //因播放器列表和ListView列表是一一对应的所以获取索引对应的播放器对象并播放 this.axWindowsMediaPlayer1.Ctlcontrols.playItem(this.axWindowsMediaPlayer1.currentPlaylist.get_Item(index)); } } private void toolStripButton1_Click(object sender, EventArgs e) { toolStripMenuItem2_Click(null, null); //效果与菜单栏中打开文件事件一样,直接带入方法 } private void toolStripButton2_Click(object sender, EventArgs e) { toolStripMenuItem3_Click(null, null); //效果与菜单栏中打开文件加事件一样,直接带入方法 } } }
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论