如何用C#进行Winform MP3播放器开发

简介:

总结一下,下午半天进行的MP3播放器的开发:

 首先,新建一个解决方案:命名MP3solution,设置FormBorderStyleNone,即上面的图标,最大化最小化按钮隐藏,但如图所示还有最大化关闭按钮,这时自己添加的两个PictureBox控件,下面的暂停,停止,静音等也是PictureBox控件设置其Image属性为properties资源中的图片.如何导入图片资源也是一个关键点。我们点击Properties下的Resources文件,然后在添加资源中添加图片资源PNG图片。值得一提的是,图片控件的BackColor属性设置为Transparent,及显示为背景颜色。别的还有两三个label控件,用来显示播放的是哪首音乐,和当前是否播放还是暂停等状态,还有一个用来显示当天播放到几秒钟的状态,两个hscrollBar进度条一个用来显示当前音乐的播放进度,另一个是显示声音的大小。另外引进一个openFileDialog控件和timer控件,分别用来打开音乐源文件和定期检测播放器的运行状态,及时显示到label控件上。

  接下来我们来看看,后台代码段:首先定义四个变量,其作用注释如下:

        private PointmouseOffset;//记录鼠标坐标

       private bool ismouseDown = false;//判断是否按下鼠标

        boolflag = false;//判断是播放还是打开选择窗口

       static bool MM = true;//记录是否静音

看到窗体最右上角的两个按键最小化和关闭按钮,其代码如下:

       //窗体最小化

       private void pictureBox1_Click(object sender, EventArgs e)

        {

           this.WindowState = FormWindowState.Minimized;

        }

        //关闭按钮

       private void pictureBox2_Click(object sender, EventArgs e)

        {

           Application.Exit();

        }

  当初在设置form窗体的FormBorderStyle属性为None的时候,其实就意味着目前的窗体是不能用鼠标来移动了,那我们如何正常移动它呢?这个要我们额外用代码来实现:

  #region 移动无边框窗体

       private void pictureBox3_MouseDown(object sender, MouseEventArgs e)

        {

           int xOffset;   //定义X坐标

           int yOffset;   //定义Y坐标

           if (e.Button == MouseButtons.Left)

            {   //如果鼠标的左键点击了,则将坐标分别进行相应的移动

               xOffset = -e.X;

               yOffset = -e.Y;

               mouseOffset = new Point(xOffset,yOffset);

               ismouseDown = true;   //mousedowm变量置为true,说明mousedown

            }

        }

 

       private void pictureBox3_MouseMove(object sender, MouseEventArgs e)

        {  //如果鼠标移动了

           if (ismouseDown)

            {

               //获取坐标的位置

               Point MousePos = Control.MousePosition;

               MousePos.Offset(mouseOffset.X,mouseOffset.Y);

                Location = MousePos;  //此时获取的坐标的值即为鼠标的坐标

            }

        }

 

       private void pictureBox3_MouseUp(object sender, MouseEventArgs e)

        { //如果鼠标按键松开了,则将mousedown属性置为false,说明鼠标的左键已经松开

           if (e.Button == MouseButtons.Left)

                ismouseDown = false;

        }

       #endregion

 

int m = 0;

        //打开播放按钮,选择要播放的MP3文件

       private void pictureBox4_Click(object sender, EventArgs e)

        {

           if (!flag)  //如果是打开按钮,则打开文件

            {

               if (openFileDialog1.ShowDialog() == DialogResult.OK)

               {

                   axWindowsMediaPlayer1.URL = openFileDialog1.FileName;

                   m = 1;

                   lblSongTitle.Text = "歌曲名称:" +  axWindowsMediaPlayer1.currentMedia.getItemInfo("Title");

               }

            }

           else

            {

               axWindowsMediaPlayer1.Ctlcontrols.play();

            }

        }

 

        //暂停功能

       private void pictureBox5_Click(object sender, EventArgs e)

        {

           axWindowsMediaPlayer1.Ctlcontrols.pause();

           flag = true;

        }

 

        //停止功能

       private void pictureBox6_Click(object sender, EventArgs e)

        {

           axWindowsMediaPlayer1.Ctlcontrols.stop();

           flag = false;

        }

 

        //静音功能

       private void pictureBox7_Click(object sender, EventArgs e)

        {

           if (MM)

            {

               pictureBox7.Image = (Image)Properties.Resources.音量按钮变色;

               axWindowsMediaPlayer1.settings.mute = true;

               MM = false;

            }

           else

            {

               pictureBox7.Image = (Image)Properties.Resources.音量按钮;

               axWindowsMediaPlayer1.settings.mute = false;

               MM = true;

            }

        }

如何动态设置图片的背景色,即当你点击一个按钮时显示的是不同的图片效果,在这里我们可以这只图片控件的背景图片为资源里面的图片

       private void pictureBox4_MouseEnter(object sender, EventArgs e)

        {

           pictureBox4.Image = (Image)Properties.Resources.播放按钮变;

        }

 

       private void pictureBox4_MouseLeave(object sender, EventArgs e)

        {

           pictureBox4.Image = (Image)Properties.Resources.播放按钮;

        }

 

       private void pictureBox5_MouseEnter(object sender, EventArgs e)

        {

           pictureBox5.Image = (Image)Properties.Resources.暂停按钮变;

        }

 

       private void pictureBox5_MouseLeave(object sender, EventArgs e)

        {

           pictureBox5.Image = (Image)Properties.Resources.暂停按钮;

        }

 

       private void pictureBox6_MouseEnter(object sender, EventArgs e)

        {

           pictureBox6.Image = (Image)Properties.Resources.停止按钮变;

        }

 

       private void pictureBox6_MouseLeave(object sender, EventArgs e)

        {

           pictureBox6.Image = (Image)Properties.Resources.停止按钮;

        }

       

        Timer这个类用来定期检测播放器的状态,以便及时更新信息,显示给用户看

       private void timer1_Tick(object sender, EventArgs e)

        {

           int i = (int)axWindowsMediaPlayer1.playState;

           switch (i)

            {

               case 1: lblStauts.Text = "状态:停止"; break;

               case 2: lblStauts.Text = "状态:暂停"; break;

               case 3: lblStauts.Text = "状态:播放"; break;

               case 6: lblStauts.Text = "状态:正在缓冲"; break;

               case 9: lblStauts.Text = "状态:正在连接"; break;

               case 10: lblStauts.Text = "状态:准备就绪"; break;

            }

           lbljindu.Text = axWindowsMediaPlayer1.Ctlcontrols.currentPositionString;

           if (m == 1)

            {

               hScrollBar1.Maximum =  (int)axWindowsMediaPlayer1.currentMedia.duration;

               hScrollBar1.Minimum = 0;

               hScrollBar1.Value = (int)axWindowsMediaPlayer1.Ctlcontrols.currentPosition;

               hScrollBar2.Value = axWindowsMediaPlayer1.settings.volume;

            }

        }

      

        //音乐播放进程条,用来显示已经播放了多少了

       private void hScrollBar1_Scroll(object sender, ScrollEventArgs e)

        {

           axWindowsMediaPlayer1.Ctlcontrols.currentPosition = e.NewValue;

        }

        //声音进程条

       private void hScrollBar2_Scroll(object sender, ScrollEventArgs e)

        {

           axWindowsMediaPlayer1.settings.volume = e.NewValue;

        }

    }

}

 

通过一个小小软件的开发,又收获到一些小的知识点,电池没电了,就简单介绍了一下,还有待改进!
























本文转自蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366817,如需转载请自行联系原作者


相关文章
|
1月前
|
前端开发 JavaScript 安全
C#一分钟浅谈:Blazor WebAssembly 开发
Blazor WebAssembly 是一个客户端框架,允许开发者使用C#和Razor语法构建Web应用。本文介绍了Blazor WebAssembly的基本概念、常见问题及解决方案,包括路由配置、数据绑定、异步操作、状态管理和性能优化等方面的内容,并分享了一些易错点及如何避免的方法。希望这些内容能帮助你在Blazor WebAssembly开发中少走弯路,提高开发效率。
100 51
|
1月前
|
开发框架 缓存 .NET
C# 一分钟浅谈:Blazor Server 端开发
Blazor Server 是基于 ASP.NET Core 的框架,允许使用 C# 和 Razor 语法构建交互式 Web 应用。本文介绍 Blazor Server 的基本概念、快速入门、常见问题及解决方案,帮助开发者快速上手。涵盖创建应用、基本组件、数据绑定、状态管理、跨组件通信、错误处理和性能优化等内容。
39 1
|
1月前
|
缓存 C# 开发者
C# 一分钟浅谈:Blazor Server 端开发
本文介绍了 Blazor Server,一种基于 .NET 的 Web 开发模型,允许使用 C# 和 Razor 语法构建交互式 Web 应用。文章从基础概念、创建应用、常见问题及解决方案、易错点及避免方法等方面详细讲解,帮助开发者快速上手并提高开发效率。
50 2
|
1月前
|
测试技术 Go C#
C#一分钟浅谈:ReSharper 插件增强开发效率
【10月更文挑战第25天】ReSharper 是 JetBrains 开发的一款 Visual Studio 插件,旨在提高 .NET 开发者的生产力。它通过代码分析、重构、导航等功能,帮助开发者避免常见错误,提升代码质量和开发效率。本文将通过具体代码案例,详细介绍 ReSharper 的常见功能及其应用。
42 1
|
1月前
|
C# Python
使用wxpython开发跨平台桌面应用,对wxpython控件实现类似C#扩展函数处理的探究
【10月更文挑战第30天】使用 `wxPython` 开发跨平台桌面应用时,可以通过创建辅助类来模拟 C# 扩展函数的功能。具体步骤包括:1. 创建辅助类 `WxWidgetHelpers`;2. 在该类中定义静态方法,如 `set_button_color`;3. 在应用中调用这些方法。这种方法提高了代码的可读性和可维护性,无需修改 `wxPython` 库即可为控件添加自定义功能。但需要注意显式调用方法和避免命名冲突。
|
2月前
|
JSON C# 开发者
C#语言新特性深度剖析:提升你的.NET开发效率
【10月更文挑战第15天】C#语言凭借其强大的功能和易用性深受开发者喜爱。随着.NET平台的演进,C#不断引入新特性,如C# 7.0的模式匹配和C# 8.0的异步流,显著提升了开发效率和代码可维护性。本文将深入探讨这些新特性,助力开发者在.NET开发中更高效地利用它们。
40 1
|
3月前
|
SQL API 定位技术
基于C#使用winform技术的游戏平台的实现【C#课程设计】
本文介绍了基于C#使用WinForms技术开发的游戏平台项目,包括项目结构、运行截图、实现功能、部分代码说明、数据库设计和完整代码资源。项目涵盖了登录注册、个人信息修改、游戏商城列表查看、游戏管理、用户信息管理、数据分析等功能。代码示例包括ListView和ImageList的使用、图片上传、图表插件使用和SQL工具类封装,以及高德地图天气API的调用。
基于C#使用winform技术的游戏平台的实现【C#课程设计】
|
2月前
|
开发框架 NoSQL MongoDB
C#/.NET/.NET Core开发实战教程集合
C#/.NET/.NET Core开发实战教程集合
|
2月前
|
设计模式 程序员 C#
C# 使用 WinForm MDI 模式管理多个子窗体程序的详细步骤
WinForm MDI 模式就像是有超能力一般,让多个子窗体井然有序地排列在一个主窗体之下,既美观又实用。不过,也要小心管理好子窗体们的生命周期哦,否则一不小心就会出现一些意想不到的小bug
189 0
|
2月前
|
API C# Windows
【C#】在winform中如何实现嵌入第三方软件窗体
【C#】在winform中如何实现嵌入第三方软件窗体
121 0