天天看點

如何用C#進行Winform MP3播放器開發

總結一下,下午半天進行的MP3播放器的開發:

 首先,建立一個解決方案:命名MP3solution,設定FormBorderStyle為None,即上面的圖示,最大化最小化按鈕隐藏,但如圖所示還有最大化關閉按鈕,這時自己添加的兩個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,說明滑鼠的左鍵已經松開

         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;

               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 = "狀态:暫停";

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

               case 6: lblStauts.Text = "狀态:正在緩沖";

               case 9: lblStauts.Text = "狀态:正在連接配接";

               case 10: lblStauts.Text = "狀态:準備就緒";

           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;

   }

通過一個小小軟體的開發,又收獲到一些小的知識點,電池沒電了,就簡單介紹了一下,還有待改進!

如何用C#進行Winform MP3播放器開發