winfrom简单开发本地音乐播放器

使用vs2019 创建winform项目

 

 

详细代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using WMPLib;


namespace MusicPlay
{

public partial class Form1 : Form
{
List<string> list = new List<string>(); // 用来存储歌单的数量
double max, min;
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 添加音乐
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void addMusic_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Title = "请选择文件";
openFileDialog.Multiselect = true; // 是否可以多选
openFileDialog.Filter = "音乐文件 (*.mp3)|*.mp3|文本文件 (*.txt)|*.txt|(*.docx)|*.docx|All files(*.*)|*.*"; // 指定选择文件的类型
if (openFileDialog.ShowDialog() == DialogResult.OK) {
// string s = openFileDialog.FileName; // 带路径的文件名
// string[] ss = openFileDialog.SafeFileNames; // 获取不带路径的文件名 返回一个字符串数组
string[] ss = openFileDialog.FileNames;
foreach (string s in ss) {
string s1 = Path.GetFileNameWithoutExtension(s);// 获取不带扩展名的文件名
list.Add(s);
this.listBoXMusic.Items.Add(s1); // 向容器中添加数据
}
}
}
/// <summary>
/// 播放音乐
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void PlayM_Click(object sender, EventArgs e)
{
//axWindowsMediaPlayer1.p
int index = listBoXMusic.SelectedIndex; // 获取当前索引
// 判断列表中是否有正在播放的歌曲,如果有,就继续播放,如果没有就播放第一首。
if (index < 0)
{

index = 0; // 如果当前没索引即为0 ,如果有索引即为索引。
// 重新设置当前索引
listBoXMusic.SelectedIndex = index; // 重新设置当前索引 就相当于设置了当前选择项。
// axWindowsMediaPlayer1.URL = list[index]; // 播放
MusicName.Text = listBoXMusic.SelectedItem.ToString();// 将当前选中项的名称赋值给label
}
else {
timer1.Enabled = true;
// 获取当前进度条的值 赋值给播放位置
axWindowsMediaPlayer1.Ctlcontrols.currentPosition = trackBar1.Value;
axWindowsMediaPlayer1.Ctlcontrols.play(); // 播放

}


}
/// <summary>
/// 暂停播放
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void stopM_Click(object sender, EventArgs e)
{
// axWindowsMediaPlayer1.Ctlcontrols.stop(); // 停止
axWindowsMediaPlayer1.Ctlcontrols.pause(); // 暂停
}
//停止播放
private void pause_Click(object sender, EventArgs e)
{
axWindowsMediaPlayer1.Ctlcontrols.stop(); // 停止
timer1.Enabled = false;
Console.WriteLine("停止时的位置:{0}",axWindowsMediaPlayer1.Ctlcontrols.currentPosition);
}
/// <summary>
/// 上一首
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void returnM_Click(object sender, EventArgs e)
{
int i = listBoXMusic.SelectedIndex; // 获取当前的索引
if (i > 0)
{
// axWindowsMediaPlayer1.URL = list[i - 1]; // 把当 当索引改变是会自动触发下面播放
listBoXMusic.SelectedIndex = i - 1; // 重新设置当前选中的索引
MusicName.Text = listBoXMusic.SelectedItem.ToString();// 将当前选中项的名称赋值给label
}
else {
MessageBox.Show("已经是第一首歌曲了");
}

}
/// <summary>
/// 下一首
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void nextM_Click(object sender, EventArgs e)
{
int i = listBoXMusic.SelectedIndex; // 获取当前的索引
if (i >= list.Count - 1) {
MessageBox.Show("已经是最后一首歌曲了");
}
else {
// axWindowsMediaPlayer1.URL = list[i + 1]; // 播放 当索引改变是会自动触发下面播放
listBoXMusic.SelectedIndex = i+1; // 重新设置当前选中的索引
MusicName.Text = listBoXMusic.SelectedItem.ToString();// 将当前选中项的名称赋值给label
}




}
/// <summary>
/// 点击歌名自动播放
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void listBoXMusic_SelectedIndexChanged(object sender, EventArgs e)
{
int i = listBoXMusic.SelectedIndex; // 获取当前的索引
axWindowsMediaPlayer1.URL = list[i]; // 把当前list 中存储的当前索引对应的url 赋值给播放器的url
timer1.Enabled = true; // 启动计时器
}
//鼠标按下
private void trackBar1_MouseDown(object sender, MouseEventArgs e)
{
timer1.Enabled = false; // 鼠标按下时停止计时
}
// 鼠标抬起
private void trackBar1_MouseUp(object sender, MouseEventArgs e)
{

// 获取当前进度条的值 赋值给播放位置
axWindowsMediaPlayer1.Ctlcontrols.currentPosition = trackBar1.Value;
timer1.Enabled = true; // 计时器开始
}

 

private void timer1_Tick(object sender, EventArgs e)
{
max = axWindowsMediaPlayer1.currentMedia.duration; // 获取文件的长度
min = axWindowsMediaPlayer1.Ctlcontrols.currentPosition; // 当前播放的位置
Console.WriteLine("开始时的位置:{0}",min);
trackBar1.Maximum = (int)max; // 设置进度条最大的值
trackBar1.Value = (int)min; // 设置进度条当前的值。
// 播放完后自动切歌
//当前播放的状态为停止状态就切歌
if (axWindowsMediaPlayer1.playState == WMPPlayState.wmppsStopped) {
//如果是最后一首就播放第一首。
listBoXMusic.SelectedIndex = listBoXMusic.SelectedIndex >= list.Count-1 ? 0 : listBoXMusic.SelectedIndex+1;

// 重置歌名
MusicName.Text = listBoXMusic.SelectedItem.ToString();// 将当前选中项的名称赋值给label

}
}
}
}

 

posted @ 2022-03-19 15:37  我是锤子  阅读(259)  评论(0编辑  收藏  举报