• 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();

                }

            }

     

     

     

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

  • 相关阅读:
    2019年6月英语四六级试题及答案和视频教程
    经典解压缩软件 WinRAR 5.90 sc 官方去广告版
    会动的边框
    萌萌达机器人
    背景图片跟随鼠标动
    烟花代码
    常用正则表达式
    计算器
    顶部下啦菜单
    ps用画笔工具设计水墨圆环
  • 原文地址:https://www.cnblogs.com/zhongmingyuan/p/4671465.html
Copyright © 2020-2023  润新知