KTV播放重要代码解析

          KTV播放重要代码解析

第一步:

 

搭建好KTV点歌界面,然后要实现的是歌星点歌,点击窗体的Load事件写如下代码:

 

    private void FrmZhu_Load(object sender, EventArgs e)

        {

            //读取MyResource表中的图片路径,放入到imagePath变量中

            string sql = "select resource_path from resource_path  where resource_id=1";

            SqlConnection con = new SqlConnection(SqlHelper.str);

            SqlCommand com = new SqlCommand(sql,con);

            con.Open();

            KTVUtil.singerPhoto = com.ExecuteScalar().ToString();

            con.Close();

            //读取歌手路径

            sql = "select resource_path from resource_path  where resource_id=2";

            com.CommandText = sql;

            try

            {

                con.Open();

                KTVUtil.SongLu = com.ExecuteScalar().ToString();

            }

            catch (Exception ex)

            {

                MessageBox.Show("系统资源错误!"+ex.Message);

            }

            finally

            {

                con.Close();

            }

        }

注释:播放器是如何得到的

首先点开工具箱,然后点击手表右键,选择”选择项” ,然后点击上方的COM组件,然后

点击 确定就行了!

 

以上代码的作用是在数据库中片和路径读取出来,然后保存到已经建好的KTVUtil类下的SongLu里

点击歌星点歌会出现以下窗体:

 

在这里要想选择你喜欢的歌手的歌曲 ,并且点击相应的类型出现第三个窗体就得需要动态加载图片

第一步:隐藏上两个窗体出现第三个窗体:记住 这里是三表连动啊! 有三个ListView;

    if (lvTwo.SelectedItems[0] != null)

            {

                lvTwo.Visible = false;

                lvThree.Location = lvTwo.Location;

                lvlB.Dock = DockStyle.Fill;

                lvThree.Size = lvlB.Size;

                lvThree.Visible = true;

                singid = Convert.ToInt32(lvTwo.SelectedItems[0].Tag);  //保存选中的地区编号第二步:连接数据库 ,然后跟你你要点击的类型查找数据库中该类型中的男歌手,女歌手,或组合 ,读取照片的路径,然后按照对应的名字把图片显示出来.

while (dr.Read())

    {

   //将歌手头像放到IamgeList控件中

   string photoURL = KTVUtil.singerPhoto + "\\" + Convert.ToString(dr["singer_poto_url"]);

     imasingerName.Images.Add(Image.FromFile(photoURL));

     //将歌手添加到ListView中

     ListViewItem list = new ListViewItem();

     list.Text = Convert.ToString(dr["singer_name"]);

     list.Tag = Convert.ToString(dr["singer_id"]);

     list.ImageIndex = imageIndex;

     lvThree.Items.Add(list);

     imageIndex++;

    }

        dr.Close();

    }

在第三个ListViewd的Clik事件里根据歌手的Id读取到歌手的照片然后显示

private void lvThree_Click(object sender, EventArgs e)

        {

            SqlConnection con = new SqlConnection(SqlHelper.str);

            StringBuilder sb = new StringBuilder();

            sb.AppendFormat("select song_id,song_name,singer_name='"+lvThree.SelectedItems[0].Text+"',song_url from song_info where singer_id="+Convert.ToInt32(lvThree.SelectedItems[0].Tag)+"");

 

            fslGEyu eyu = new fslGEyu();

            eyu.name = sb.ToString();

            eyu.Previous = Execute.Singer;//指定返回的窗体是按歌手点歌

            eyu.Show();

           // this.Close();

接下来出现的窗体就是该歌手的歌曲列表:

 

当点击歌曲的时候 :它会出现在已点的歌曲列表里,我们要做的就是

讲歌曲设置为空:然后调用Mon()方法

      

 

  1.  public    static void mOn() 

           {

               if (SongList[SongIndex] != null && SongList[SongIndex].Son == alreadySon.repeatsong)    //如果SongIndex里面有值,那么就说明当前的歌曲是以播的状态

               {

                   SongList[SongIndex].YiB();  //我们就把以播状态的方法给它

               }

               else

               {

                   SongIndex++;  

               }

2.//然后将选中的歌曲对象加入到数组中

  private void dgvList_CellClick(object sender, DataGridViewCellEventArgs e)

        {

            //创建一个歌曲对象,并将当前选中的歌曲名和路径赋给该对象

            Songa song = new Songa();

            song.Songname = dgvList.SelectedRows[0].Cells["Column1"].Value.ToString(); //songName 为dgv中列的名称

            song.Songway = dgvList.SelectedRows[0].Cells["Column3"].Value.ToString();

            //将选择的歌曲添加到数组中

            DYShu.AddSong(song);  //赋给数组

        }

3.   //定义一个长度为50 的数组,默认储存50首歌

           public static Songa[] SongList = new Songa[50];

           public static int SongIndex = 0;   //当前播放的歌曲在数组中的索引

   if (Player1.playState == WMPLib.WMPPlayState.wmppsStopped)

            {

                song = null;

                DYShu.mOn();

            }

4.然后在播放窗口加上一个 Timer控件

private void Tmer_Tick(object sender, EventArgs e)

        {

            if (song == null)

            {

                PlaySong();

            }

4.1判定 在Timer控件的Tick事件中如果数组的位置是空的时候,调用PlaySong()方法

        private void Tmer_Tick(object sender, EventArgs e)

            {

            if (song == null)

            {

                PlaySong();

            }

            if (Player1.playState == WMPLib.WMPPlayState.wmppsStopped)

            {

                song = null;//将歌曲设为空

                DYShu.mOn();

            }

            if (song != null && song.Son == alreadySon.repeatsong)

            {

                PlaySong();

            }

        }

 

 

 

  做的不好  大家多多指教!!!

posted @ 2015-07-23 19:23  钟铭远  阅读(1525)  评论(0编辑  收藏  举报