C#:WinForm窗体项目实现音频文件按指定时间播放 详细实现(无需数据库支持)
该项目实现的功能如下:
1.播放mp3文件;
2.播放mp4文件;
3.定时播放mp3或mp4文件。
先来看运行效果:
操作面板:
操作演示:
(这个水印去不掉了因为我是穷苦的免费用户。还有,若输入的时间是15:28默认应该播放的时间是当天15:28:00,超过这个时间则失效)
实现过程:
1.添加控件Windows Media Player
该控件如下图所示:
在visual Studio的上方菜单栏的视图->工具箱->任意一个控件右键->选择项->COM组件->勾选Windows Media Player选项
如下图所示
添加成功了后,就可以在工具箱里看到该控件。如下
将该控件拖入设计窗口即可。
2.添加控件 button 并编写按键行为
控件如下图所示:
按钮控件button1(外观:直接播放MP3)
该控件实现打开文件对话框,选择MP3文件进行播放。具体代码如下:
private void button1_Click(object sender, EventArgs e)
{
FileDialog open = new OpenFileDialog();
this.axWindowsMediaPlayer1.settings.playCount = 1;//播放次数
open.Filter = "*.mp3|*.mp3";
open.Title = "打开文件";
if (open.ShowDialog() == DialogResult.OK)//打开对话框
{
axWindowsMediaPlayer1.URL = open.FileName;
axWindowsMediaPlayer1.Ctlcontrols.play();//播放文件
}
}
按钮控件button2(外观:直接播放MP4)
FileDialog open = new OpenFileDialog();
//wxWindowsMediaplayer1是控件名
this.axWindowsMediaPlayer1.settings.playCount = 1;//播放次数
open.Filter = "*.mp4|*.mp4"; //文件格式
open.Title = "打开文件";
if (open.ShowDialog() == DialogResult.OK)//打开对话框
{
axWindowsMediaPlayer1.URL = open.FileName;
axWindowsMediaPlayer1.Ctlcontrols.play();//播放文件
}
3.添加控件dataGridView
该控件实现记录用户自行添加的播放列表
控件如下图所示
将控件拖入设计窗口,右键控件选择编辑列->添加,如下图所示
点击该控件跳转倒代码部分,添加代码:
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
dataGridView1.BackgroundColor = Color.White;//背景颜色
this.dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
}
4.添加控件button(外观:选择文件)及控件textBox(只读)
这两个控件实现打开文件及显示文件位置。
将button控件和textBox控件拖入设计框中。
控件如下图所示:
button控件(外观选择文件代码)
private void button4_Click(object sender, EventArgs e)//opn file
{
FileDialog open = new OpenFileDialog();
axWindowsMediaPlayer1.settings.playCount = 1;//播放次数;
open.Filter = "*.mp3|*.mp3";
open.Title = "打开文件";
if (open.ShowDialog() == DialogResult.OK)//打开对话框
{
filename = open.FileName;
textBox1.Text = filename;
}
}
textBox控件右键属性->将ReadOnly属性设置为True
5.添加控件label和控件textBox
这两个控件实现注释和允许用户输入设定播放时间的功能。
控件如下图所示:
将label控件拖入设计窗口,并在属性中将外观改成播放时间,即可。
其后的textBox控件也是拖入即可。
6.添加控件button(外观:添加)及控件button(外观:删除)
实现将步骤4和步骤五的内容添加到步骤3的表中以及从dataGridView中删除数据。
控件如下图所示:
button(外观:添加)的代码
private void button3_Click(object sender, EventArgs e)
{
if (filename == null || textBox2.Text == null)//检查输入
MessageBox.Show("选择文件与播放时间均不能为空!");
else
{
try
{
DateTime.Parse(textBox2.Text);
//MessageBox.Show(DateTime.Parse(textBox2.Text).ToString());
DataGridViewRow row = new DataGridViewRow();
int index = dataGridView1.Rows.Add(row);
dataGridView1.Rows[index].Cells[0].Value = index + 1;//将信息记录到dataGridView的第index行开始的第1个单元格中
dataGridView1.Rows[index].Cells[1].Value = filename;
dataGridView1.Rows[index].Cells[2].Value = textBox2.Text;
}
catch (FormatException ex)//异常捕获
{
MessageBox.Show("不是正确的时间格式。例如:八点三十分应该写成:8:30或8:30:00或08:30:00");
}
}
}
button(外观:删除)的行为代码:
private void button5_Click(object sender, EventArgs e)//deldete row删除选中行
{
if (this.dataGridView1.SelectedRows.Count > 0)
{
dataGridView1.Rows.Remove(dataGridView1.SelectedRows[0]);
}
}
7.添加控件button(外观:开始执行)
该控件将播放dataGridView中的待执行记录。
该控件如下图所示:
控件代码:
private void button6_Click(object sender, EventArgs e)//开始执行按钮
{
int number = dataGridView1.Rows.GetRowCount(DataGridViewElementStates.Visible);
MessageBox.Show("开始执行"+(number-1).ToString()+"条记录。");
playlist = new string[number+1, 2];
for (int i=0; i < number; i++)
{
if (dataGridView1.Rows[i].Cells[1].Value != null && dataGridView1.Rows[i].Cells[2].Value != null)
{
playlist[i,0]=dataGridView1.Rows[i].Cells[1].Value.ToString();//存放文件路径
playlist[i,1] = dataGridView1.Rows[i].Cells[2].Value.ToString();//存放播放时间
}
}
}
8.添加时间控件timer
该控件控制刷新列表的执行状态。
从工具箱中将timer控件拖入设计窗口中。
如下图所示:
双击它跳转到代码编写处。
添加行为代码:
private void timer1_Tick(object sender, EventArgs e)//定时播放
{
this.label1.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//this.label1.Text = DateTime.Now.ToString("T");
TimeSpan ts;//时间间隔
j= dataGridView1.Rows.GetRowCount(DataGridViewElementStates.Visible);
if (playlist != null)
{
for (int i = 0; i < j; i++)
{
if (playlist[i, 1]!=null)//为了保证运行不中断,此步检查非常必要!
{
ts = DateTime.Parse(playlist[i, 1]) - DateTime.Now;
if (-1 < ts.TotalSeconds && ts.TotalSeconds < 0)//若达到条件则播放文件
{
axWindowsMediaPlayer1.URL = playlist[i, 0];
axWindowsMediaPlayer1.Ctlcontrols.play();//播放文件
dataGridView1.Rows[i].Cells[3].Value = "已播放";
}
if ( ts.TotalSeconds < -10)
if (dataGridView1.Rows[i].Cells[3].Value == null)
dataGridView1.Rows[i].Cells[3].Value = "时间失效";
}
}
}
}
9.给窗口添加自定义的lcon
选中窗口属性->窗口样式->Icon->选者准备好的*.ico文件。
效果如运行窗口左上所示。
整个项目的实现不依赖数据库。
工程源码资源已上传,可自行下载。
以上。