c#基于winform制作音樂播放器
更新時間:2021年03月23日 10:46:09 作者:程序員ken
這篇文章主要介紹了c#基于winform制作音樂播放器的方法,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
前言:項目是c#的winform 寫的,使用的播放器是基于AxWindowsMediaPlayer。
AxWindowsMediaPlayer的方法

1 首先新建一個頁面 如圖所示: 圖片左側(cè)是列表 使用listview 右側(cè)是背景圖片。圖片框框的地方是后面可以實現(xiàn)的,+和-按鈕分別代表添加文件和刪除文件 還有就是控制播放的順序。下面的分別是修改歌詞的字體 和展示/隱藏

2 新建一個透明的歌詞頁面[窗體]

3 新建一個半透明的頁面[窗體]

4 業(yè)務(wù)代碼
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using WMPLib;
using System.Media;
using System.IO;
using System.Text.RegularExpressions;
using AxWMPLib;
using System.Drawing.Drawing2D;
using CCWin;
namespace KenMusicPlayer
{
public partial class MusicPlayer : Skin_DevExpress
{
public int index = 1;
public int listIndex;
private bool first_in = true; //是否第一次進入歌詞區(qū)域
private bool showLrc = true;//默認(rèn)顯示歌詞
private int imageInd = 0;//播放的圖片下標(biāo)
private List<string> imageList;//播放的圖片
private Point closePoint;//關(guān)閉按鈕的位置
private Size dfSize;//最初的位置
//聲音
SoundPlayer player = new SoundPlayer();
Dictionary<string, string> dic = new Dictionary<string, string>();
//播放列表
Dictionary<string, IWMPMedia> playListDict = new Dictionary<string, IWMPMedia>();
List<string> al = new List<string>(); //當(dāng)前歌詞時間表
IWMPMedia media;
/*
*下面這一大段API調(diào)用,主要是用來設(shè)置歌詞窗口的滾動條的
*但其實后面,我并沒有怎么用到,只是在將滾動條滾動到底部時,用了一下
*/
private const int WM_VSCROLL = 0x115;
private const int SB_HORZ = 0;
private const int SB_VERT = 1;
private const int SB_CTL = 2;
private const int SB_BOTH = 3;
private const int SB_LINEUP = 0;
private const int SB_LINELEFT = 0;
private const int SB_LINEDOWN = 1;
private const int SB_LINERIGHT = 1;
private const int SB_PAGEUP = 2;
private const int SB_PAGELEFT = 2;
private const int SB_PAGEDOWN = 3;
private const int SB_PAGERIGHT = 3;
private const int SB_THUMBPOSITION = 4;
private const int SB_THUMBTRACK = 5;
private const int SB_TOP = 6;
private const int SB_LEFT = 6;
private const int SB_BOTTOM = 7;
private const int SB_RIGHT = 7;
private const int SB_ENDSCROLL = 8;
private const int WM_PAINT = 0x000F;
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern bool ScrollWindow(IntPtr hWnd, int XAmount, int YAmount, ref Rectangle lpRect, ref Rectangle lpClipRect);
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int SetScrollPos(IntPtr hwnd, int nBar, int nPos, bool bRedraw);
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int SetScrollPos(int nBar, int nPos, bool bRedraw);
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int GetScrollPos(IntPtr hwnd, int nBar);
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern bool UpdateWindow(IntPtr hWnd);
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
public void setWord()
{
}
public MusicPlayer()
{
this.StartPosition = FormStartPosition.CenterScreen;//窗口居中顯示
InitializeComponent();
}
private void MusicPlayer_Load(object sender, EventArgs e)
{
InitLoad();
}
/// <summary>
/// 初始化 加載播放列表 如歌詞 背景圖 定時器等等
/// </summary>
private void InitLoad()
{
try
{
bool flag = false;
string folder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bgImages");
DirectoryInfo root = new DirectoryInfo(folder);
FileInfo[] files = root.GetFiles();
string fileName;
for (int i = 0; i < files.Length; i++)
{
fileName = files[i].Name.ToLower();
if (fileName.EndsWith(".png") || fileName.EndsWith(".jpeg") || fileName.EndsWith(".jpg"))
{
if (!flag)
{
imageList = new List<string>();
this.pictureBox1.Image = Image.FromFile(files[i].FullName);
}
imageList.Add(files[i].FullName);
flag = true;
}
}
playerType.Text = playerType.Items[0].ToString();//默認(rèn)第一個
closePoint = this.skinButtonClose.Location;
dfSize = this.Size;
richTextBox1.BackColor = this.TransparencyKey;
skinComboBoxFontName.Text = skinComboBoxFontName.Items[0].ToString();//默認(rèn)第一個
skinComboBoxFontSize.Text = skinComboBoxFontSize.Items[0].ToString();//默認(rèn)第一個
ComboBoxSkinSelect.Text = ComboBoxSkinSelect.Items[0].ToString();//默認(rèn)第一個
//this.BackPalace = Image.FromFile(ComboBoxSkinSelect.Items[0].ToString());//默認(rèn)第一個
lvDetail.AllowDrop = true;
lvDetail.View = View.Details;
lvDetail.DragEnter += Files_DragEnter;//對象拖拽事件
lvDetail.DragDrop += Files_DragDrop;//拖拽操作完成事件
//wmp.OpenStateChange += WMP_OpenStateChange;
wmp.PlayStateChange += WMP_PlayStateChange;
timerImgs.Start();
}
catch (Exception ex)
{
Console.WriteLine("錯誤:" + ex.Message);
}
}
/// <summary>
/// 提供給透明歌詞窗口的定時器調(diào)用的
/// </summary>
/// <param name="s"></param>
public void showTmform(bool s)
{
if (s)
{
this.btmForm.Show();
if (this.first_in)
{
this.lrcForm.TopMost = true;
Point point = this.Location;
point.Y = point.Y + this.Height;
this.lrcForm.Location = point;
this.btmForm.Location = point;
this.lrcForm.Width = this.Width;
this.btmForm.Width = this.Width;
this.first_in = false;
}
}
else
{
this.first_in = true;
this.btmForm.Hide();
}
}
/// <summary>
/// 播放時會進入這個事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void WMP_PlayStateChange(object sender, _WMPOCXEvents_PlayStateChangeEvent e)
{
loadLrc();
}
/// <summary>
/// 拖拽操作完成事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Files_DragDrop(object sender, DragEventArgs e)
{
try
{
string fileName, fileExtension, fileSize, temp;
FileInfo fi = null;
ListViewItem lvi = null;
Array array = (Array)e.Data.GetData(DataFormats.FileDrop);
Regex regex = new Regex("(\\.mp3|\\.wav|\\.wma)");
string filePath;
for (int i = 0; i < array.Length; i++)
{
filePath = array.GetValue(i).ToString();
//屬于音樂文件 且列表中不存在
if (regex.IsMatch(filePath) &&
!dic.ContainsKey(filePath))
{
wmp.Ctlcontrols.stop();
InsertPlayList(out fileName, out fileExtension, out fileSize, out temp, out fi, out lvi, filePath);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
/// <summary>
/// 插入播放列表 和字典集
/// </summary>
/// <param name="fileName"></param>
/// <param name="fileExtension"></param>
/// <param name="fileSize"></param>
/// <param name="temp"></param>
/// <param name="fi"></param>
/// <param name="lvi"></param>
/// <param name="filePath"></param>
private void InsertPlayList(out string fileName, out string fileExtension, out string fileSize, out string temp, out FileInfo fileInfo, out ListViewItem listViewItem, string filePath)
{
fileInfo = new FileInfo(filePath);
temp = filePath.Remove(filePath.LastIndexOf('.'));
fileName = Path.GetFileNameWithoutExtension(filePath);
fileExtension = Path.GetExtension(filePath);
fileSize = (fileInfo.Length / 1024).ToString() + "KB";
listViewItem = new ListViewItem();
listViewItem.Text = index++.ToString();
listViewItem.SubItems.AddRange(new string[] { fileName, fileExtension, fileSize, filePath });
lvDetail.Items.Add(listViewItem);
//添加到播放列表
media = wmp.newMedia(filePath);
//listIndex++,
//wmp.currentPlaylist.insertItem(media);
wmp.currentPlaylist.appendItem(media);
playListDict.Add(filePath, media);
//杜絕重復(fù)項
dic.Add(filePath, fileName);
}
/// <summary>
/// 文件拖拽進入
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Files_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.Link;
}
else
{
e.Effect = DragDropEffects.None;
}
}
/// <summary>
/// 導(dǎo)入文件
/// </summary>
private void tsmiLoading_Click(object sender, EventArgs e)
{
string fileName, fileExtension, fileSize, temp;
FileInfo fi = null;
ListViewItem lvi = null;
openFileDialog1.Multiselect = true;
openFileDialog1.Filter = "mp3文件(*.mp3)|*.mp3|wav文件(*.wav)|*.wav|wma文件(*.wma)|*.wma";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
//順序播放
wmp.settings.setMode("shuffle", false);
foreach (string filePath in openFileDialog1.FileNames)
{
if (!dic.ContainsKey(filePath))
{
InsertPlayList(out fileName, out fileExtension, out fileSize, out temp, out fi, out lvi, filePath);
}
}
}
}
/// <summary>
/// 清除列表
/// </summary>
private void ListViewClear_Click(object sender, EventArgs e)
{
lvDetail.Items.Clear();
}
/// <summary>
/// 播放
/// </summary>
private void tsmiPlayer_Click(object sender, EventArgs e)
{
wmp.Ctlcontrols.play();
}
/// <summary>
/// 暫停
/// </summary>
private void tsmiWaiting_Click(object sender, EventArgs e)
{
wmp.Ctlcontrols.pause();
}
/// <summary>
/// 停止
/// </summary>
private void tsmiStop_Click(object sender, EventArgs e)
{
wmp.Ctlcontrols.stop();
}
/// <summary>
/// 退出
/// </summary>
private void tsmiExit_Click(object sender, EventArgs e)
{
Application.Exit();
}
/// <summary>
/// 雙擊某項播放
/// </summary>
private void lvDetail_DoubleClick(object sender, EventArgs e)
{
if (lvDetail.SelectedItems.Count > 0)
{
wmp.currentMedia = wmp.currentPlaylist.Item[int.Parse(lvDetail.SelectedItems[0].Text) - 1];
}
}
/// <summary>
/// 循環(huán)播放
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tsmiXunHuan_Click(object sender, EventArgs e)
{
//點擊項
ToolStripMenuItem currentItem = (ToolStripMenuItem)sender;
ToolStripItemCollection items = this.tsmiSet.DropDownItems;
ToolStripMenuItem item;
for (int i = 0; i < items.Count; i++)
{
item = (ToolStripMenuItem)items[i];
item.Checked = false;
if (item.Name == currentItem.Name)
{
item.Checked = true;
}
}
wmp.settings.setMode("loop", true);
}
//順序
private void tsmiDanQu_Click(object sender, EventArgs e)
{
IWMPMedia currentMedia = wmp.currentMedia;
//點擊項
ToolStripMenuItem currentItem = (ToolStripMenuItem)sender;
ToolStripItemCollection items = this.tsmiSet.DropDownItems;
ToolStripMenuItem item;
for (int i = 0; i < items.Count; i++)
{
item = (ToolStripMenuItem)items[i];
item.Checked = false;
if (item.Name == currentItem.Name)
{
item.Checked = true;
}
}
//順序播放
wmp.settings.setMode("shuffle", false);
}
/// <summary>
/// 圖片寬高設(shè)置
/// </summary>
/// <param name="imgToResize"></param>
/// <param name="size"></param>
/// <returns></returns>
public static Image ResizeImage(Image imgToResize, Size size)
{
//獲取圖片寬度
int sourceWidth = imgToResize.Width;
//獲取圖片高度
int sourceHeight = imgToResize.Height;
float nPercent = 0;
float nPercentW = 0;
float nPercentH = 0;
//計算寬度的縮放比例
nPercentW = ((float)size.Width / (float)sourceWidth);
//計算高度的縮放比例
nPercentH = ((float)size.Height / (float)sourceHeight);
if (nPercentH < nPercentW)
nPercent = nPercentH;
else
nPercent = nPercentW;
//期望的寬度
int destWidth = (int)(sourceWidth * nPercent);
//期望的高度
int destHeight = (int)(sourceHeight * nPercent);
Bitmap b = new Bitmap(destWidth, destHeight);
Graphics g = Graphics.FromImage((System.Drawing.Image)b);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
//繪制圖像
g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
g.Dispose();
return (System.Drawing.Image)b;
}
private void playerType_SelectedIndexChanged(object sender, EventArgs e)
{
if (playerType.Text == "順序播放")
{
//順序播放
wmp.settings.setMode("shuffle", false);
}
else if (playerType.Text == "循環(huán)播放")
{
wmp.settings.setMode("loop", true);
}
else if (playerType.Text == "隨機播放")
{
//順序播放
wmp.settings.setMode("shuffle", true);
}
}
/// <summary>
/// 定時器執(zhí)行的方法,每隔1秒執(zhí)行一次 歌詞逐行顯示
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ShowLineLrc(object sender, EventArgs e)
{
this.label1.Text = this.wmp.Ctlcontrols.currentPositionString;
if (this.lrcForm == null)
{
this.lrcForm = new TMForm();
Point pos = this.Location;
pos.Y = lrcForm.Location.Y + lrcForm.Height;
this.Location = pos;
this.btmForm = new BTMForm();
MusicPlayer mainForm = (MusicPlayer)this.Owner;
btmForm.Location = pos;
this.lrcForm.Owner = this;
this.btmForm.Owner = this;
this.btmForm.Hide();
this.lrcForm.Show();
}
if (this.wmp.currentMedia == null)
{
this.richTextBox1.Text = "";
return;
}
string durationString = this.wmp.currentMedia.durationString;
int trackBarValue = Convert.ToInt32(this.wmp.Ctlcontrols.currentPosition);
//this.trackBar1.Maximum = Convert.ToInt32(this.wmp.currentMedia.duration);
//this.trackBar1.Value = Convert.ToInt32(this.wmp.Ctlcontrols.currentPosition);
if (this.richTextBox1.Text != "歌詞文件不存在" && this.richTextBox1.Text != "歌詞文件內(nèi)容為空")
{
int pos = al.IndexOf(trackBarValue.ToString());
bool isAr = this.richTextBox1.Text.Contains("歌手:");
bool isTi = this.richTextBox1.Text.Contains("歌名:");
if (pos >= 0)
{
int n = isAr ? 1 : 0;
int m = isTi ? 1 : 0;
int height = 28 * (this.al.Count + m + n);
int max = height - this.richTextBox1.Height;
this.richTextBox1.SelectAll();
this.richTextBox1.SelectionColor = Color.Black;
this.richTextBox1.SelectionLength = 0;/**/
int l = this.richTextBox1.Lines[pos + m + n].Length;
this.richTextBox1.Select(this.richTextBox1.GetFirstCharIndexFromLine(pos + m + n), l);
this.richTextBox1.SelectionColor = Color.OrangeRed;
this.richTextBox1.SelectionLength = 0;
//this.Text = GetScrollPos(this.richTextBox1.Handle, SB_VERT).ToString() + "-" + al.Count + "-" + this.richTextBox1.Height;
if ((pos + m + n) * 28 <= max)
{
int start = this.richTextBox1.GetFirstCharIndexFromLine(pos + m + n);
this.richTextBox1.SelectionStart = start;
this.richTextBox1.ScrollToCaret();
}
else
{
//this.richTextBox1.Focus();
SendMessage(this.richTextBox1.Handle, WM_VSCROLL, SB_BOTTOM, 0);
UpdateWindow(this.richTextBox1.Handle);
//this.richTextBox1.SelectionStart = this.richTextBox1.Text.Length;
//this.richTextBox1.ScrollToCaret();
}
if (this.lrcForm != null)
{
string l1 = this.richTextBox1.Lines[pos + m + n];
string l2;
if ((pos + m + n) < this.richTextBox1.Lines.Length - 1)
{
l2 = this.richTextBox1.Lines[pos + m + n + 1];
}
else
{
l2 = "。。。。。";
}
this.lrcForm.setLrc(l1, l2, pos);
//this.lrcForm.setLrc(ArrayList al,);
}
}
}
//this.Text = this.trackBar1.Value.ToString();
/*if (trackBarValue >= (this.trackBar1.Maximum - 2))
{
this.PlayModeChange();
}*/
}
/// <summary>
/// 載入歌詞
/// </summary>
/// <param name="lrc_filename">歌詞路徑名</param>
public void loadLrc()
{
if (this.wmp.playState == WMPPlayState.wmppsPlaying)
{
IWMPMedia currentMedia = wmp.currentMedia;
string fullPath = currentMedia.sourceURL;
string geciPath = Path.Combine(Path.GetDirectoryName(fullPath), Path.GetFileNameWithoutExtension(fullPath) + ".lrc");
//播放哪個資源 列表需選中
ListView.ListViewItemCollection listViewItems = lvDetail.Items;
lvDetail.FullRowSelect = true;
for (int i = 0; i < listViewItems.Count; i++)
{
listViewItems[i].Checked = false;
listViewItems[i].Selected = false;
listViewItems[i].BackColor = Color.White;
if (listViewItems[i].SubItems[4].Text == fullPath)
{
listViewItems[i].Checked = true;
listViewItems[i].Selected = true;
listViewItems[i].BackColor = Color.LightBlue;
}
}
if (!File.Exists(geciPath))
{
this.richTextBox1.Text = "歌詞文件內(nèi)容為空";
return;
}
using (StreamReader sr = new StreamReader(new FileStream(geciPath, FileMode.Open), Encoding.Default))
{
string tempLrc = "";
while (!sr.EndOfStream)
{
tempLrc = sr.ReadToEnd();
}
if (tempLrc.Trim() == "")
{
this.richTextBox1.Text = "歌詞文件內(nèi)容為空";
return;
}
tempLrc = tempLrc.Trim();
Regex rg = new Regex("\r*\n*\\[ver:(.*)\\]\r*\n*");
tempLrc = rg.Replace(tempLrc, "");
rg = new Regex("\r*\n*\\[al:(.*)\\]\r*\n*");
tempLrc = rg.Replace(tempLrc, "");
rg = new Regex("\r*\n*\\[by:(.*)\\]\r*\n*");
tempLrc = rg.Replace(tempLrc, "");
rg = new Regex("\r*\n*\\[offset:(.*)\\]\r*\n*");
tempLrc = rg.Replace(tempLrc, "");
rg = new Regex("\r*\n*\\[ar:(.*)\\]\r*\n*");
Match mtch;
mtch = rg.Match(tempLrc);
tempLrc = rg.Replace(tempLrc, "\n歌手:" + mtch.Groups[1].Value + "\n");
rg = new Regex("\r*\n*\\[ti:(.+?)\\]\r*\n*"); //這里注意貪婪匹配問題.+?
mtch = rg.Match(tempLrc);
tempLrc = rg.Replace(tempLrc, "\n歌名:" + mtch.Groups[1].Value + "\n");
rg = new Regex("\r*\n*\\[[0-9][0-9]:[0-9][0-9].[0-9][0-9]\\]");
MatchCollection mc = rg.Matches(tempLrc);
al.Clear();
foreach (Match m in mc)
{
string temp = m.Groups[0].Value;
//this.Text += temp + "+";
string mi = temp.Substring(temp.IndexOf('[') + 1, 2);
string se = temp.Substring(temp.IndexOf(':') + 1, 2);
string ms = temp.Substring(temp.IndexOf('.') + 1, 2); //這是毫秒,其實我只精確到秒,毫秒后面并沒有用
//this.Text += mi + ":" + se + "+";
string time = Convert.ToInt32(mi) * 60 + Convert.ToInt32(se) + ""; //這里并沒有添加毫秒
al.Add(time);
}
tempLrc = rg.Replace(tempLrc, "\n");
char[] remove = { '\r', '\n', ' ' };
this.richTextBox1.Text = tempLrc.TrimStart(remove);
this.timer1.Interval = 1000;
this.timer1.Tick += ShowLineLrc;
this.timer1.Start();
}
}
}
private void wmp_Enter(object sender, EventArgs e)
{
loadLrc();//點擊播放
}
/// <summary>
/// 刪除選中的文件 并停止播放
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void skinButton2_Click(object sender, EventArgs e)
{
try
{
ListView.SelectedIndexCollection indexes = this.lvDetail.SelectedIndices;
if (indexes.Count > 0)
{
int index = indexes[0];
string path = this.lvDetail.Items[index].SubItems[4].Text;
IWMPPlaylist iWMPPlaylist = wmp.currentPlaylist;
//先移除播放列表 再移除listview列表
wmp.currentPlaylist.removeItem(playListDict[path]);
playListDict.Remove(path);
this.lvDetail.Items[index].Remove();
dic.Remove(path);
wmp.Ctlcontrols.stop();
}
}
catch (Exception ex)
{
MessageBox.Show("操作失??!\n" + ex.Message, "提示", MessageBoxButtons.OK,
MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
}
}
/// <summary>
/// 列表鼠標(biāo)雙擊事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lvDetail_MouseDoubleClick(object sender, MouseEventArgs e)
{
try
{
ListView.SelectedIndexCollection indexes = this.lvDetail.SelectedIndices;
if (indexes.Count > 0)
{
int index = indexes[0];
string path = this.lvDetail.Items[index].SubItems[4].Text;
wmp.Ctlcontrols.playItem(playListDict[path]);
//wmp.URL = path;//這種方式會失去播放列表【不是肉眼可見的listview列表】
wmp.Ctlcontrols.stop();
wmp.Ctlcontrols.play();
}
}
catch (Exception ex)
{
MessageBox.Show("操作失?。n" + ex.Message, "提示", MessageBoxButtons.OK,
MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
}
}
/// <summary>
/// 字體改變
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void skinComboBoxFontName_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.lrcForm != null)
{
this.lrcForm.ChangeLabelFont(this.skinComboBoxFontName.SelectedItem.ToString(), this.skinComboBoxFontSize.SelectedItem.ToString());
}
}
/// <summary>
/// 字體大小改變
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void skinComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.lrcForm != null)
{
this.lrcForm.ChangeLabelFont(this.skinComboBoxFontName.SelectedItem.ToString(), this.skinComboBoxFontSize.SelectedItem.ToString());
}
}
/// <summary>
/// 歌詞是否顯示
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void skinButton5_Click(object sender, EventArgs e)
{
if (this.lrcForm == null)
{
return;
}
this.showLrc = !this.showLrc;
this.skinButton5.Text = this.showLrc ? "關(guān)閉" : "顯示";
if (this.showLrc)
{
this.btmForm.Show();
this.lrcForm.Show();
}
else
{
this.btmForm.Hide();
this.lrcForm.Hide();
}
}
/// <summary>
/// 背景圖片切換
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timerImgs_Tick(object sender, EventArgs e)
{
if (imageInd <= imageList.Count - 2)
{
imageInd++;
this.pictureBox1.Image.Dispose();
this.pictureBox1.Image = Image.FromFile(imageList[imageInd]);
}
else
{
imageInd=0;
}
}
/// <summary>
/// 粘貼音樂到播放列表
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lvDetail_KeyDown(object sender, KeyEventArgs e)
{
System.Collections.Specialized.StringCollection stringCollection = Clipboard.GetFileDropList();
if (stringCollection != null)
{
string fileName, fileExtension, fileSize, temp;
FileInfo fi = null;
ListViewItem lvi = null;
foreach (var item in stringCollection)
{
if ((item.ToLower().EndsWith(".mp3") ||
item.ToLower().EndsWith(".wav") ||
item.ToLower().EndsWith(".wma")) && !dic.ContainsKey(item) )
{
InsertPlayList(out fileName, out fileExtension, out fileSize, out temp, out fi, out lvi, item);
}
}
}
}
//選擇皮膚
private void ComboBoxSkinSelect_SelectedIndexChanged(object sender, EventArgs e)
{
string bgColor = ComboBoxSkinSelect.SelectedItem.ToString();
if (!string.IsNullOrEmpty(ComboBoxSkinSelect.SelectedItem.ToString()))
{
switch (bgColor)
{
case "漸變黑":
this.BorderPalace = kenMusicPlayer.Properties.Resources.bg_black;
break;
case "天藍色":
this.BorderPalace = kenMusicPlayer.Properties.Resources.bg_light_blue;
break;
case "墨綠色":
this.BorderPalace = kenMusicPlayer.Properties.Resources.bg_green;
break;
case "藍色":
this.BorderPalace = kenMusicPlayer.Properties.Resources.bg_s_blue;
break;
case "淺灰色":
this.BorderPalace = kenMusicPlayer.Properties.Resources.bg_grey;
break;
case "亮色":
this.BorderPalace = kenMusicPlayer.Properties.Resources.bg_light;
break;
default:
this.BorderPalace = kenMusicPlayer.Properties.Resources.bg_black;
break;
}
/*this.UpdateStyles();
this.Update();*/
//this.BackPalace = Image.FromFile(ComboBoxSkinSelect.SelectedItem.ToString());
}
}
/// <summary>
/// 退出
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void skinButtonClose_Click(object sender, EventArgs e)
{
//this.Close();
Application.Exit();
}
private void MusicPlayer_Resize(object sender, EventArgs e)
{
try
{
Size size = this.Size;
int x = (size.Width - dfSize.Width) + closePoint.X;
int y = closePoint.Y;//(size.Height - dfSize.Height) + closePoint.Y;
Point point = new Point(x, y);
this.skinButtonClose.Location = point;
}
catch (Exception ex)
{
Console.WriteLine("異常:" + ex.Message);
}
}
/// <summary>
/// 改方法也是提供給透明歌詞窗口用的,用來修改半透明窗體的位置,是透明歌詞窗口和半透明窗體始終重合
/// </summary>
/// <param name="pos"></param>
public void moveTmform(Point pos)
{
this.btmForm.Location = pos;
}
}
}
源碼地址:https://gitee.com/ten-ken/mus...
以上就是c#基于winform制作音樂播放器的詳細內(nèi)容,更多關(guān)于c# 音樂播放器的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
ItemsControl 數(shù)據(jù)綁定的兩種方式
這篇文章主要介紹了ItemsControl 數(shù)據(jù)綁定的兩種方式,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-03-03

