各位大虾们:
想写一个音乐播放器,主要思路是用WMPLib.WindowsMediaPlayer的实例来播放歌曲,用一个listview来显示播放列表,现在遇到几个问题,希望各位帮帮忙:1.listview的MultiSelect属性设为true,当播放某一首歌时,用“this.listview1.Items[listview1.seletItems[0].Index].checked = true;”来使listview中的这首歌曲处于选定状态(就是说像用鼠标点击了一样,显示为蓝色),但是,当播放结束时,给这个item的checked属性赋值为false,用调试状态运行时它的checked属性也确实是false,但在列表的画面中它仍处于选定状态(仍为蓝色),这是为什么???2.若要实现以下功能:当右击列表时,若有歌曲选中显示一个contextMenuStrip,若没有歌曲选中(也就是说单击的是列表的空白处)显示另一个contextMenuStrip,各位有什么好的实现办法吗??3.如何添加一个进度条,显示一首歌播放的进度??4.如何添加一个控制音量的东西??

解决方案 »

  1.   

    WindowsMediaPlayer控件似乎带音量控制的
      

  2.   

    1 设置为Uncheck的时候,再刷新绑定一次数据。
    2 点击事件的代码里面,用if判断下,遍历下列表框,看有没有选中项.
    3 WMPLib.WindowsMediaPlayer自带有播放进度显示.
    4 WMPLib.WindowsMediaPlayer自带有音量控制..
      

  3.   

    2.判断歌曲列表里有没有歌曲。有歌曲的话右键菜单赋上相应的item,反之。
      

  4.   

    [email protected]
    谢啦~~~
      

  5.   

    WindowsMediaPlayer控件可以控制播放的哟,
      

  6.   

    1、界面应该要自己控制,选中下一首播放歌曲,刷新一下。2、最好是弹出同一个菜单,但根据“有无选中歌曲”来决定某些选项是否为灰色(不可操作)。3、试下这个currentPositionString属性,string类型4、volume属性:integer类型; 音量,0-100 
      

  7.   

    用WindowsMediaPlayer是太好,你一点底层的东西都不会涉及,好好学一下音频方面的知识吧,
      

  8.   

    这里是我写过的一个播放器完整代码:
    你也可以去这个地址看更多信息:http://361330106.qzone.qq.com/
    完整代码:
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    namespace MP3播放器
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            string fileName = "";
            int i = 1;
            private void openToolStripMenuItem_Click(object sender, EventArgs e)
            {
                if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
                {
                    fileName = folderBrowserDialog1.SelectedPath;
                    string[] mp3Name = Directory.GetFiles(fileName);
                    foreach(string str in mp3Name)
                    {
                        //str.Substring();
                        listBox1.Items.Add(i+"."+str.Substring(str.LastIndexOf('\\')+1));
                        i++;
                    }
                }
            }
            private void listBox1_DoubleClick(object sender, EventArgs e)
            {
                    timer1.Start();
                try 
                {
                    string playName = fileName+"\\"+listBox1.SelectedItem.ToString().Substring(listBox1.SelectedItem.ToString().IndexOf('.')+1);
                    axWindowsMediaPlayer1.URL = playName;
                }catch(Exception ex)
                {
                    MessageBox.Show("Sorry,Can't Find You FilePath,Please Sure You FileName!"+ex.ToString(),"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
                }
            }
            private void Form1_Load(object sender, EventArgs e)
            {
                skinEngine1.SkinFile = "MSN.ssk";
                timer1.Start();
                DataSet Ds = new DataSet();
                Ds.ReadXml("FileName.xml");
                for (int a = 0; a < Ds.Tables[0].Rows.Count; a++)
                {
                    object[] list = new object[a];
                    list = Ds.Tables[0].Rows[a].ItemArray;
                    listBox1.Items.Add( list[0].ToString().Substring(list[0].ToString().LastIndexOf('\\')+1));
                    fileName = list[0].ToString().Substring(0,list[0].ToString().LastIndexOf('\\')+1);
                }
                //MessageBox.Show(fileName);
                //fileName=Ds.Tables[0].Rows[0]
            }
            private void timer1_Tick(object sender, EventArgs e)
            {
                try 
                {
                    string States = axWindowsMediaPlayer1.status.ToString();
                    if (States.Equals("已停止"))
                    {
                        listBox1.SelectedIndex++;
                        listBox1_DoubleClick(null, null);
                    }
                    else if (States.Equals("准备就绪"))
                    {
                        MessageBox.Show("请确定你的文件格式是否正确!","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning);
                        timer1.Stop();
                    }
                    toolStripStatusLabel1.Text = States;
                    toolStripStatusLabel3.Text = "当前时间为:" + System.DateTime.Now.ToLongDateString() + System.DateTime.Now.ToLongTimeString();
                }
                catch (Exception ex)
                {
                    listBox1.SelectedIndex = 1;
                    listBox1_DoubleClick(null, null);
                }
            }
            private void pauseToolStripMenuItem_Click(object sender, EventArgs e)
            {
                axWindowsMediaPlayer1.Ctlcontrols.pause();
            }
            private void stopToolStripMenuItem_Click(object sender, EventArgs e)
            {
                axWindowsMediaPlayer1.Ctlcontrols.play();
            }
            private void exitToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Application.Exit();
            }
            private void 添加文件ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                if(openFileDialog1.ShowDialog()==DialogResult.OK)
                {
                    //if (i != 1)
                    //{
                    //    i++;
                    //}
                    string StrName = openFileDialog1.FileName;
                    fileName = StrName.Substring(0, StrName.LastIndexOf('\\')+1);
                    listBox1.Items.Add(i + "." + StrName.Substring(StrName.LastIndexOf('\\') + 1));
                    i++;
                }
            }
            private void addFilesToolStripMenuItem_Click(object sender, EventArgs e)
            {
                openToolStripMenuItem_Click(null,null);
            }
            private void deleteFileToolStripMenuItem_Click(object sender, EventArgs e)
            {
                listBox1.Items.Remove(listBox1.SelectedItem);
            }
            private void saveToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //string[] ArrayStr = new string;
                ////for (int j= 0; j<= ArrayStr.Length;j++)
                ////{
                ////    ArrayStr[j] = listBox1.Items[j].ToString();
                ////}
                int t = listBox1.Items.Count;
                for (int c = 0; c < t;c++ )
                {
                    if(listBox1.Items[c].ToString().Equals("")||listBox1.Items[c].Equals("歌曲列表"))
                    {
                        continue;
                    }
                    DataSet Ds = new DataSet();
                    Ds.ReadXml(Application.StartupPath+"\\FileName.xml");
                    DataRow Dr = Ds.Tables[0].NewRow();
                    Dr["Name"] =fileName+"\\"+ listBox1.Items[c].ToString();
                    Ds.Tables[0].Rows.Add(Dr);
                    Ds.WriteXml(Application.StartupPath + "\\FileName.xml");
                }
                MessageBox.Show("当前列表保存成功,下次你可以轻松享受Coffee给你带来的快乐!","温馨提示",MessageBoxButtons.OK,MessageBoxIcon.Warning);
            }
            private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
            {
                if (this.Visible)
                {
                    this.Visible = false;
                }
                else
                {
                    this.Visible = true;
                }
            }
            private void exitToolStripMenuItem1_Click(object sender, EventArgs e)
            {
                Application.Exit();
            }
        }
      

  9.   

    WindowsMediaPlayer功能貌似很强大,简单的播放器应该都不用涉及音频处理那些。
      

  10.   

    //index表示刚播放完的那首歌的索引
    this.listview1.Items[index].Selected=false;
    this.listview1.Items[index+1].Selected=true;
      

  11.   


    某些选项是否为灰色应该怎么设置??没找到呀~~还有,为什么一个toolStripStstusLabel的size属性不能修改呢???谢啦~~~
      

  12.   


    this.menuItem1.Checked=false;
    //VS2003
    如果是VS2008则是:
    this.toolStripMenuItem2.Checked = false;后面一个问题没看明白
      

  13.   


    能否把第三方控件共享下,我想学习下.还请分享[email protected]
      

  14.   


    就是为statusStrip控件添加一个ToolStripStatusLabel,想使这个ToolStripStatusLabel处于statusStrip的中间,但不知道怎么实现,因为它没法移动;就想改一下ToolStripStatusLabel的size,结果,在属性面板里改了以后一离开size属性右边的框框,它就变回原来的值了,这是怎么回事儿呀??
      

  15.   

    哦,说的这个啊。修改这个ToolStripStatusLabel的padding就可以了。x1,y1,x2,y2相信你能看得懂,一般改x1和x2的值进行调整就可以了。
      

  16.   

    怎么会这样:修改了padding属性后确实实现了位置的改变,但是之后在修改ToolStripStatusLabel.text属性后所修改的text内容就显示不出来了(整个ToolStripStatusLabel好像被隐藏了)这是怎么回事儿呀??
      

  17.   

    这是我的代码..怎么改成可以歌曲循环播放??
    sing System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    namespace WindowsApplication3
    {
        public partial class Form1 : Form
        {
            int count = 1;        string file1 = "E:\\音乐\\够爱.mp3";
            string file2 = "E:\\音乐\\海派甜心 - 爱不单行.mp3";
            string file3 = "E:\\音乐\\六哲 - 被伤过的心还可以爱谁.mp3";
            string file4 = "E:\\音乐\\慕容晓晓 - 爱情买卖.mp3";
            public Form1()
            {
                InitializeComponent();
            }
                   private void Form1_Load(object sender, EventArgs e)
            {
                axWindowsMediaPlayer1.settings.setMode("loop", true);   //当前歌曲的循环           
                axWindowsMediaPlayer1.URL = file1;
                this.Text = file1.Substring(file1.LastIndexOf("\\") + 1) + "--" + this.Text;
            }        private void button1_Click(object sender, EventArgs e)
            {
                if (count == 1)
                    count = 4;
                else
                    count--;
                this.Text = "MediaPlayer";
                switch (count)
                {
                    case 1:
                        {
                            axWindowsMediaPlayer1.URL = file1;
                            this.Text = file1.Substring(file1.LastIndexOf("\\") + 1) + "--" + this.Text;
                            break;
                        }
                    case 2:
                        {
                            axWindowsMediaPlayer1.URL = file2;
                            this.Text = file2.Substring(file2.LastIndexOf("\\") + 1) + "--" + this.Text;
                            break;
                        }
                    case 3:
                        {
                            axWindowsMediaPlayer1.URL = file3;
                            this.Text = file3.Substring(file3.LastIndexOf("\\") + 1) + "--" + this.Text;
                            break;
                        }
                    case 4:
                        {
                            axWindowsMediaPlayer1.URL = file4;
                            this.Text = file4.Substring(file4.LastIndexOf("\\") + 1) + "--" + this.Text;
                            break;
                        }
                }
            }        private void button2_Click(object sender, EventArgs e)
            {
                if (count == 4)
                    count = 1;
                else
                    count++;
                this.Text = "MediaPlayer";
                switch (count)
                {
                    case 1:
                        {
                            axWindowsMediaPlayer1.URL = file1;
                            this.Text = file1.Substring(file1.LastIndexOf("\\") + 1) + "--" + this.Text;
                            break;
                        }
                    case 2:
                        {
                            axWindowsMediaPlayer1.URL = file2;
                            this.Text = file2.Substring(file2.LastIndexOf("\\") + 1) + "--" + this.Text;
                            break;
                        }
                    case 3:
                        {
                            axWindowsMediaPlayer1.URL = file3;
                            this.Text = file3.Substring(file3.LastIndexOf("\\") + 1) + "--" + this.Text;
                            break;
                        }
                    case 4:
                        {
                            axWindowsMediaPlayer1.URL = file4;
                            this.Text = file4.Substring(file4.LastIndexOf("\\") + 1) + "--" + this.Text;
                            break;
                        }
                }        }        private void button3_Click(object sender, EventArgs e)
            {
                this.axWindowsMediaPlayer1.Ctlcontrols.play();//继续播放
            }        private void button4_Click(object sender, EventArgs e)
            {
                this.axWindowsMediaPlayer1.Ctlcontrols.pause(); //暂停
            }        private void button5_Click(object sender, EventArgs e)
            {
                this.axWindowsMediaPlayer1.settings.volume += 5;//声音+5
            }        private void button6_Click(object sender, EventArgs e)
            {
                this.axWindowsMediaPlayer1.settings.volume -= 5; //声音-5
            }
        }
    }