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()方法
- 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();
}
}