博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自己动手写的音乐播放器
阅读量:5209 次
发布时间:2019-06-14

本文共 29778 字,大约阅读时间需要 99 分钟。

其实很早就有这个想法了,不求界面多么华丽,只求功能实现,想来也不会很难,音乐播放器无非也就是些IO的操作,我写的山寨音乐播放器暂不支持在线播放,如果要播放的话,要将音乐文件下载到本地,通过IO操作读入程序中来,废话不多说了,界面如下(参考了传智播客蒋坤老师的相关课程):

一些变量的定义及含义:

string temp1 = null;        string temp2 = null;        //设置添加曲目的路径        string strSearchPath;        //定时退出的时间        int iSecond;        bool IsVisible = false;        //存放选择歌曲全路径        List
strFullPath = new List
(); //存放整理后的歌词 string[] sLrc = null; //存放搜索歌曲的全路径 List
strSearchLst = new List
();

 1.加载文件(“打开”按钮)

1 private void BtnOpen_Click(object sender, EventArgs e) 2         { 3             #region 加载播放列表,并开始播放 4             using (OpenFileDialog ofd=new OpenFileDialog()) 5             { 6                 //从配置文件读取歌曲所在路径 7                 ofd.InitialDirectory = ConfigurationManager.AppSettings["FilePath"]; 8                 ofd.Title = "加载音乐文件"; 9                 ofd.Multiselect = true;10                 ofd.Filter = "音乐文件(*.mp3)|*.mp3|其他格式(*.avi)|*.avi|所有文件(*.*)|*.*";11                 int n = -1;12 13                 if (ofd.ShowDialog() == DialogResult.OK)14                 {15                     string[] strFullName = ofd.FileNames;16                     if (strFullName.Length > 0)17                     {18                         for (int i = 0; i < strFullName.Length; i++)19                         {20                             if (!strFullPath.Contains(strFullName[i]))21                             {22                                 strFullPath.Add(strFullName[i]);23                                 //F:\音乐\Beyond-海阔天空.mp324                                 string[] str = strFullName[i].Split('\\');25                                 lbSongsList.Items.Add(str[str.Length - 1]);26                                 PlaySongs();   27                             }28                             else29                             {30                                 //包含该歌曲31                                 if (MessageBox.Show("播放列表中已经包含该歌曲,现在播放吗?","提示",MessageBoxButtons.OKCancel)==DialogResult.OK)32                                 {33                                     string s = ofd.FileName;34                                     for (int j = 0; j < strFullPath.Count; j++)35                                     {36                                         if (strFullPath[j] == s)37                                         {38                                             n = j;39                                             break;40                                         }41                                     }  42                                 }43                                 else44                                 {45                                     return;46                                 }47                             }48                         }49 50                         if (n != -1)51                         {52                             PlaySongs(n);53                         } 54                     }55                 }56             }57             #endregion58         }
View Code

 PlaySongs()方法的定义如下:

1 ///  2         /// 默认播放方法 3         ///  4         private void PlaySongs() 5         { 6             PlaySongs(0); 7         } 8  9         /// 10         /// 播放方法11         /// 12         /// 13         private void PlaySongs(int i)14         {15             lbLrc1.Text = "";16             lbLrc2.Text = "";17             lbLrc3.Text = "";18             sLrc = null;19 20             if (i!=-1)21             {22                 timer1.Enabled = true;23                 axWindowsMediaPlayer1.URL = strFullPath[i];24                 lbSongsList.SelectedIndex = i;25                 this.Text = "当前播放曲目:" + lbSongsList.SelectedItem.ToString();26                 axWindowsMediaPlayer1.Ctlcontrols.play();27                 LoadLrc(axWindowsMediaPlayer1.URL);28             }29 30             if (lbSongsList.Items.Count>0)31             {32                 groupBox1.Enabled = true;33                 txtSelect.Enabled = true;34                 BtnSelect.Enabled = true;35                 BtnClear.Enabled = true;36                 temp1 = lbSongsList.SelectedItem.ToString();37                 lbMsg.Text = "当前列表共有歌曲" + strFullPath.Count + "首歌,当前播放曲目为:" + lbSongsList.SelectedItem.ToString();38             }39         }
View Code

LoadLrc()是加载歌词文件的方法,定义如下:

1 ///  2         /// 加载歌词 3         ///  4         ///  5         private void LoadLrc(string p) 6         { 7             //F:\音乐\Beyond-光辉岁月(国语版).mp3 8             string[] strLrcLines; 9             int k = p.LastIndexOf('.');10             string sMusicLrc = p.Substring(0,k) + ".lrc";11             12             if (File.Exists(sMusicLrc))13             {14                 #region 废弃15                 //Encoding codeType = GetFileEncodingTye(sMusicLrc);16                 //if (codeType.BodyName=="UTF8")17                 //{18                 //    strLrcLines = File.ReadAllLines(sMusicLrc, Encoding.UTF8);19                 //    SelectLrc(strLrcLines);20                 //}21                 //else if (codeType.BodyName=="gb2312")22                 //{23                 //    strLrcLines = File.ReadAllLines(sMusicLrc, Encoding.Default);24                 //    SelectLrc(strLrcLines);   25                 //}26                 //else27                 //{28                 //    strLrcLines = File.ReadAllLines(sMusicLrc, Encoding.Default);29                 //    SelectLrc(strLrcLines);30                 //} 31                 #endregion32 33                 strLrcLines = File.ReadAllLines(sMusicLrc, Encoding.UTF8);34                 SelectLrc(strLrcLines);35             }36             else37             {38                 lbLrc2.Text = "--该歌词未找到--";39                 strLrcLines = null;40             }41         }
View Code

其中,加载歌词文件,涉及到歌词的整理,定义方法为SelectLrc(),定义如下:

1 ///  2         /// 整理歌词文件 3         ///  4         ///  5         private void SelectLrc(string[] strLrcLines) 6         { 7             List
sTemp = new List
(); 8 //[00:33.28]在他生命里仿佛带点唏嘘 9 if (strLrcLines.Length>0)10 {11 for (int i = 0; i < strLrcLines.Length; i++)12 {13 string[] s1 = strLrcLines[i].Split(new char[] { '[', ']' }, StringSplitOptions.RemoveEmptyEntries);14 for (int j = 0; j < s1.Length; j++)15 {16 if (s1[j].Contains(':'))17 {18 sTemp.Add(s1[j] + "|" + s1[s1.Length - 1]);19 }20 }21 } 22 }23 sTemp.Sort();24 sLrc = sTemp.ToArray();25 }
View Code

下面就要将整理好的歌词文件和音乐播放同步了,使用的是timer控件,将其间隔时间设为1000(1秒钟触发一次),写其Tick事件:

1 #region 歌词显示 2             if (lbSongsList.SelectedIndex != -1) 3             { 4                 #region 信息显示 5                 temp1 = temp1.Length > 10 ? temp1.Substring(1) + temp1[0] : temp1; 6                 lbName.Text = "歌名:" + temp1; 7                 temp2 = temp2.Length > 15 ? temp2.Substring(1) + temp2[0] : temp2; 8                 lbState.Text = "播放状态:" + temp2; 9                 lbPosition.Text = "当前位置:" + axWindowsMediaPlayer1.Ctlcontrols.currentPositionString;10                 lbTotalTime.Text = "总时长:" + axWindowsMediaPlayer1.currentMedia.durationString;11                 if (axWindowsMediaPlayer1.settings.mute == true)12                 {13                     lbVol.Text = "音量:静音 ";14                 }15                 else16                 {17                     lbVol.Text = "音量:" + axWindowsMediaPlayer1.settings.volume.ToString();18                 }19                 #endregion20 21                 if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsPlaying)22                 {23                     if (sLrc != null)24                     {25                         for (int i = 0; i < sLrc.Length - 1; i++)26                         {27                             //00:02.01|光辉岁月 (指定曲目) - Beyond28                             if (string.Compare(axWindowsMediaPlayer1.Ctlcontrols.currentPositionString, sLrc[i]) > 0 && string.Compare(axWindowsMediaPlayer1.Ctlcontrols.currentPositionString, sLrc[i + 1]) < 0)29                             {30                                 //if (i-1>0)31                                 //{32                                 //    lbLrc1.Text = sLrc[i - 1].Split('|')[1];33                                 //}34                                 //else35                                 //{36                                 //    lbLrc1.Text = "";37                                 //}38                                 lbLrc1.Text = i - 1 > 0 ? sLrc[i - 1].Split('|')[1] : "";39                                 lbLrc2.Text = sLrc[i].Split('|')[1];40                                 lbLrc3.Text = sLrc[i + 1].Split('|')[1];41                             }42 43                             if (string.Compare(axWindowsMediaPlayer1.Ctlcontrols.currentPositionString, sLrc[0]) < 0)44                             {45                                 lbLrc1.Text = "";46                                 lbLrc2.Text = lbSongsList.SelectedItem.ToString();47                                 lbLrc3.Text = sLrc[1].Split('|')[1];48                             }49                             if (string.Compare(axWindowsMediaPlayer1.Ctlcontrols.currentPositionString, sLrc[sLrc.Length - 1]) > 0)50                             {51                                 lbLrc1.Text = sLrc[sLrc.Length - 2].Split('|')[1];52                                 lbLrc2.Text = sLrc[sLrc.Length - 1].Split('|')[1];53                                 lbLrc3.Text = "";54                             }55                         }56                     }57                 }58             } 59             #endregion
View Code

temp2存储的是播放状态,在播放器的StatusChange()事件中为其赋值。

1 void axWindowsMediaPlayer1_StatusChange(object sender, EventArgs e)2         {3             temp2 = axWindowsMediaPlayer1.status;4         }

 接下来是播放控制区的功能实现(上一曲,下一曲,播放,暂停等功能)

1 private void BtnPause_Click(object sender, EventArgs e) 2         { 3             #region 控制播放/暂停功能 4             if (lbSongsList.Items.Count > 0) 5             { 6                 if (BtnPause.Text == "暂停") 7                 { 8                     BtnPause.Text = "播放"; 9                     axWindowsMediaPlayer1.Ctlcontrols.pause();10                 }11                 else if (BtnPause.Text == "播放")12                 {13                     BtnPause.Text = "暂停";14                     BtnStop.Text = "终止";15                     axWindowsMediaPlayer1.Ctlcontrols.play();16                 }17             }18             #endregion19         }
View Code
1 private void BtnStop_Click(object sender, EventArgs e) 2         { 3             #region 控制终止功能 4             if (lbSongsList.Items.Count > 0) 5             { 6                 if (BtnStop.Text == "终止") 7                 { 8                     BtnStop.Text = "取消终止"; 9                     BtnPause.Text = "播放";10                     axWindowsMediaPlayer1.Ctlcontrols.stop();11                 }12                 else if (BtnStop.Text == "取消终止")13                 {14                     BtnStop.Text = "终止";15                     BtnPause.Text = "暂停";16                     axWindowsMediaPlayer1.Ctlcontrols.play();17                 }18             }19             #endregion20         }
View Code
1 private void BtnPrev_Click(object sender, EventArgs e) 2         { 3             #region 上一曲 4             //int j = lbSongsList.SelectedIndex; 5             //if (j!=-1&&lbSongsList.Items.Count>0) 6             //{ 7             //    j = j == 0 ? strFullPath.Count - 1 : --j; 8             //    PlaySongs(j); 9             //}10 11             int j = -1;12             string s = axWindowsMediaPlayer1.URL;13 14             if (strFullPath.Count > 0)15             {16                 for (int i = 0; i < strFullPath.Count; i++)17                 {18                     if (strFullPath[i]==s)19                     {20                         j = i;21                         break;22                     }23                 }24 25                 if (j!=-1)26                 {27                     j = j == 0 ? strFullPath.Count - 1 : --j;28                     PlaySongs(j);29                 }30             }31             #endregion32         }
View Code
1 private void BtnNext_Click(object sender, EventArgs e) 2         { 3             #region 下一曲 4             //int j = lbSongsList.SelectedIndex; 5             //if (j!=-1&&lbSongsList.Items.Count>0) 6             //{ 7             //    j = j == strFullPath.Count - 1 ? 0 : ++j; 8             //    PlaySongs(j); 9             //}10 11             int j = -1;12             string s = axWindowsMediaPlayer1.URL;13 14             if (strFullPath.Count>0)15             {16                 for (int i = 0; i < strFullPath.Count; i++)17                 {18                     if (strFullPath[i]==s)19                     {20                         j = i; break;21                     }22                 }23 24                 if (j!=-1)25                 {26                     j = j == strFullPath.Count - 1 ? 0 : ++j;27                     PlaySongs(j);28                 }29             }30             #endregion31         }
View Code

控制音量:

1 private void BtnVolUp_Click(object sender, EventArgs e) 2         { 3             #region 音量加 4             if (lbSongsList.Items.Count>0) 5             { 6                 axWindowsMediaPlayer1.settings.volume += 5; 7                 cbMute.Checked = false; 8             } 9             #endregion10         }11 12         private void BtnVolDown_Click(object sender, EventArgs e)13         {14             #region 音量减15             if (lbSongsList.Items.Count>0)16             {17                 axWindowsMediaPlayer1.settings.volume -= 5;18                 cbMute.Checked = false;19             }20             #endregion21         }
View Code

静音:

1 private void cbMute_CheckedChanged(object sender, EventArgs e)2         {3             #region 静音4             if (lbSongsList.Items.Count > 0)5             {6                 axWindowsMediaPlayer1.settings.mute = cbMute.Checked;7             }8             #endregion9         }
View Code

接下来是歌曲搜索的功能(暂不完善):

1 private void BtnSelect_Click(object sender, EventArgs e) 2         { 3             #region 歌曲检索 4             int j = -1; 5             var sSelect = txtSelect.Text; 6  7             if (!string.IsNullOrEmpty(sSelect)) 8             { 9                 string sPattern = ".*" + sSelect + ".*";10                 for (int i = 0; i 
View Code

当清空搜索框中的文本时,播放器回归默认播放,从第一首歌开始播放:

1 private void BtnClear_Click(object sender, EventArgs e)2         {3             if (txtSelect.Text != "" || txtSearch.Text!="")4             {5                 txtSelect.Text = "";6                 txtSearch.Text = "";7                 PlaySongs();8             }9         }
View Code

双击播放列表,实现播放:

1 private void lbSongsList_DoubleClick(object sender, EventArgs e) 2         { 3             #region 双击播放 4             var item = lbSongsList.SelectedItem; 5             int m = -1; 6             if (item!=null) 7             { 8                 var s = item.ToString(); 9                 for (int i = 0; i < lbSongsList.Items.Count; i++)10                 {11                     if (lbSongsList.Items[i].ToString()==s)12                     {13                         m = i;14                         break;15                     }16                 }17 18                 if (m != -1)19                 {20                     PlaySongs(m);21                 }22             }23             #endregion24         }
View Code

右击播放列表,添加歌曲,删除歌曲,清空播放列表功能实现:

1 private void tsmiAdd_Click(object sender, EventArgs e)  2         {  3             #region 右击添加歌曲  4             int m = lbSongsList.SelectedIndex;  5             if (m==-1)  6             {  7                 return;  8             }  9  10             int n = -1; 11  12             using (OpenFileDialog ofd=new OpenFileDialog()) 13             { 14                 ofd.InitialDirectory = ConfigurationManager.AppSettings["FilePath"]; 15                 ofd.Title = "添加单首音乐文件"; 16                 ofd.Multiselect = false; 17                 ofd.Filter = "音乐文件(*.mp3)|*.mp3|其他格式(*.avi)|*.avi|所有文件(*.*)|*.*"; 18  19                 if (ofd.ShowDialog()==DialogResult.OK) 20                 { 21                     string sName = ofd.FileName; 22                     if (sName.Length>0) 23                     { 24                         if (strFullPath.Contains(sName)) 25                         { 26                             //当前播放列表包含该歌曲 27                             if (MessageBox.Show("当前播放列表包含该歌曲,现在播放吗?","提示",MessageBoxButtons.OKCancel)==DialogResult.OK) 28                             { 29                                 //播放 30                                 for (int i = 0; i < strFullPath.Count; i++) 31                                 { 32                                     if (strFullPath[i]==sName) 33                                     { 34                                         n = i; 35                                         break; 36                                     } 37                                 } 38                             } 39                             else 40                             { 41                                 return; 42                             } 43                         } 44                         else 45                         { 46                             //当前播放列表不包含该歌曲 47                             if (MessageBox.Show("当前播放列表不包含该歌曲,现在添加播放吗?","提示",MessageBoxButtons.YesNo)==DialogResult.Yes) 48                             { 49                                 //添加音乐文件,并播放该文件 50                                 strFullPath.Insert(m, sName); 51                                 string[] str = sName.Split('\\'); 52                                 lbSongsList.Items.Insert(m, str[str.Length - 1]); 53                                 n = m; 54                             } 55                             else 56                             { 57                                 return; 58                             } 59                         } 60                     } 61                     else 62                     { 63                         return; 64                     } 65                 } 66             } 67  68             if (n!=-1) 69             { 70                 PlaySongs(n); 71             } 72             #endregion 73         } 74  75         private void tsmiDelete_Click(object sender, EventArgs e) 76         { 77             //删除当前歌曲 78             int i = -1; 79             var s = axWindowsMediaPlayer1.URL; 80             for (int j = 0; j < strFullPath.Count; j++) 81             { 82                 if (strFullPath[j]==s) 83                 { 84                     i = j; 85                     break; 86                 } 87             } 88             if (i==-1) 89             { 90                 return; 91             } 92  93             if (MessageBox.Show("你确定要删除选中的歌曲吗?","提示",MessageBoxButtons.YesNo)==DialogResult.Yes) 94             { 95                 //从当前播放列表移除该歌曲,自动播放下一首歌 96                 strFullPath.RemoveAt(i); 97                 lbSongsList.Items.RemoveAt(i); 98  99                 if (lbSongsList.Items.Count > 0)100                 {101                     if (i == lbSongsList.Items.Count)102                     {103                         //如果是最后一首,则删除后播放第一首歌104                         i = 0;105                     }106                     PlaySongs(i);107                 }108             }109             else110             {111                 return;112             }113         }114 115         private void tsmiClear_Click(object sender, EventArgs e)116         {117             #region 清空播放列表118             if (MessageBox.Show("你确定要清空当前播放列表吗?","提示",MessageBoxButtons.YesNo)==DialogResult.Yes)119             {120                 //清空121                 if (strFullPath.Count>0)122                 {123                     ClearMedia();124                 }125             }126             else127             {128                 return;129             }130             #endregion131         }
View Code
1 ///  2         /// 清空播放列表时的操作 3         ///  4         private void ClearMedia() 5         { 6             strFullPath.Clear(); 7             lbSongsList.Items.Clear(); 8             axWindowsMediaPlayer1.Ctlcontrols.stop(); 9             this.Text = "音乐播放器";10             lbName.Text = "歌名:";11             lbState.Text = "播放状态:";12             lbPosition.Text = "当前位置:";13             lbTotalTime.Text = "总时长:";14             lbVol.Text = "音量:";15             lbLrc1.Text = "";16             lbLrc2.Text = "";17             lbLrc3.Text = "";18             sLrc = null;19             File.Delete("music.txt");20         }
View Code

 搜索指定路径中的歌曲文件,并添加到播放列表中:

1 private void BtnPath_Click(object sender, EventArgs e) 2         { 3             #region 设定选择路径 4             using (FolderBrowserDialog fbd=new FolderBrowserDialog()) 5             { 6                 fbd.Description = "选择路径"; 7                 fbd.RootFolder = Environment.SpecialFolder.MyComputer; 8  9                 if (fbd.ShowDialog()==DialogResult.OK)10                 {11                     strSearchPath = fbd.SelectedPath;12                     MessageBox.Show("路径设定完成");13                     BtnPath.Enabled = false;14                 }15             }16             #endregion17         }
View Code
1 private void BtnAddSearch_Click(object sender, EventArgs e) 2         { 3             #region 将搜索的曲目添加到右侧列表 4             if (string.IsNullOrEmpty(strSearchPath)) 5             { 6                 MessageBox.Show("搜索路径不能为空,请选择"); 7                 BtnPath.Focus(); 8                 return; 9             }10 11             lbSearchList.Items.Clear();12 13             var sSearch = txtSearch.Text;14             if (!string.IsNullOrEmpty(sSearch) && strSearchPath != "")15             {16                 string[] sSearchFName = Directory.GetFiles(strSearchPath, "*" + sSearch + "*.mp3");17                 for (int i = 0; i < sSearchFName.Length; i++)18                 {19                     if (!strFullPath.Contains(sSearchFName[i]))20                     {21                         strSearchLst.Add(sSearchFName[i]);22                         string[] SearchName = sSearchFName[i].Split('\\');23                         lbSearchList.Items.Add(SearchName[SearchName.Length - 1]);24                     }25                     else26                     {27                         MessageBox.Show("播放列表中已经包含该文件,请搜索播放");28                         txtSelect.Focus();29                         return;30                     }31                 }32             }33             else34             {35                 MessageBox.Show("请输入添加歌曲的关键词");36                 txtSearch.Focus();37                 return;38             }39             #endregion40         }
View Code
1 private void BtnToLeft_Click(object sender, EventArgs e) 2         { 3             #region 将右侧列表中的歌曲添加到左边 4             if (lbSearchList.SelectedIndex!=-1) 5             { 6                 //for (int i = lbSearchList.SelectedItems.Count; i > 0; i--) 7                 //{ 8                 //    var s = lbSearchList.SelectedItem.ToString(); 9                 //    if (!lbSongsList.Items.Contains(s))10                 //    {11                 //        lbSongsList.Items.Add(s);12                 //        //strFullPath.Add(strSearchLst[i]);13                 //        lbSearchList.Items.Remove(s);14                 //    }15                 //}16 17                 int k = -1;18 19                 for (int i = 0; i < strSearchLst.Count; i++)20                 {21                    string[] str= strSearchLst[i].Split('\\');22                    if (lbSearchList.SelectedItem!=null)23                    {24                        if (str[str.Length - 1] == lbSearchList.SelectedItem.ToString())25                        {26                            k = i;27                            strFullPath.Add(strSearchLst[k]);28                            lbSongsList.Items.Add(str[str.Length - 1]);29                            lbSearchList.Items.Remove(str[str.Length - 1]);30                        }   31                    }32                 }33             }34 35             if (lbSongsList.SelectedItem!=null)36             {37                 lbMsg.Text = "当前列表共有歌曲" + strFullPath.Count + "首歌,当前播放曲目为:" + lbSongsList.SelectedItem.ToString();   38             }39             #endregion40         }
View Code

在播放器退出时,将最新的播放列表文件更新到文件中:

1 private void BtnExit_Click(object sender, EventArgs e) 2         { 3             if (strFullPath.Count > 0) 4             { 5                 if (File.Exists("music.txt")) 6                 { 7                     File.Delete("music.txt"); 8                 } 9 10                 for (int i = 0; i <= strFullPath.Count - 1; i++)11                 {12                     File.AppendAllText("music.txt", strFullPath[i] + "\r\n", Encoding.Default);13                 }14             }15             this.Close();16         }
View Code

 至此,音乐播放器的主要功能都已实现,下面是一些辅助功能的实现代码:

1.调整字体字号:

1 private void BtnSetting_Click(object sender, EventArgs e) 2         { 3             //调整字体字号 4             using (FontDialog fd=new FontDialog()) 5             { 6                 fd.Font = lbLrc2.Font; 7                 if (fd.ShowDialog()==DialogResult.OK) 8                 { 9                     lbLrc2.Font = fd.Font;10                     lbSongsList.Font = fd.Font;11                 }12             }13         }
View Code

2.设置字体颜色:

1 private void BtnSetColor_Click(object sender, EventArgs e) 2         { 3             //设置字体颜色 4             using (ColorDialog cd=new ColorDialog()) 5             { 6                 cd.Color = lbLrc2.ForeColor; 7                 if (cd.ShowDialog()==DialogResult.OK) 8                 { 9                     lbLrc2.ForeColor = cd.Color;10                     lbSongsList.ForeColor = lbLrc2.ForeColor;11                 }12             }13         }
View Code

3.设置背景色:

1 private void BtnBColor_Click(object sender, EventArgs e) 2         { 3             //设置背景色 4             using (ColorDialog cd = new ColorDialog()) 5             { 6                 cd.Color = lbLrc2.BackColor; 7                 if (cd.ShowDialog() == DialogResult.OK) 8                 { 9                     lbSongsList.BackColor = cd.Color;10                 }11             }12         }
View Code

4.实现系统托盘的功能,使用到的是notifyIcon控件:

1  private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) 2         { 3             if (e.Button==MouseButtons.Left) 4             { 5                 this.WindowState = FormWindowState.Normal; 6                 //this.ShowInTaskbar = true; 7                 notifyIcon1.Visible = false; 8                 this.ShowInTaskbar = !notifyIcon1.Visible; 9                 this.Activate();10             }11         }
View Code

5.定时退出的功能实现(为系统托盘的关联菜单功能),定义TimeOver(时间参数),方法:

1 private void TimeOver(int i)2         {3             iSecond = i * 60;4             IsVisible = true;5         }
View Code

并在Time控件中计时:

1 if (IsVisible) 2             { 3                 if (iSecond >= 1) 4                 { 5                     lbShow.Visible = true; 6                     iSecond--; 7                     string s = ConvertTime(iSecond); 8                     lbShow.Text = s + "后程序将退出"; 9                     lbShow.ForeColor = Color.BlueViolet;10                     lbShow.Font = new Font("微软雅黑", 12);11                 }12                 else13                 {14                     lbShow.Visible = false;15                     BtnExit_Click(sender, e);16                 }17             }
View Code
1 ///  2         /// 时间转换方法 3         ///  4         ///  5         /// 
6 private string ConvertTime(int iSecond) 7 { 8 StringBuilder sb = new StringBuilder(); 9 10 if (iSecond/3600>=1)11 {12 int a = Convert.ToInt32(iSecond) / 3600;13 sb.Append(a + "时");14 int b = iSecond - a * 3600; //剩余秒数15 if (b/60>=1)16 {17 int c = Convert.ToInt32(b) / 60; //分钟数18 sb.Append(c + "分");19 int d = b - c * 60;20 if (d>0)21 {22 sb.Append(d + "秒");23 }24 }25 else26 {27 sb.Append(Convert.ToInt32(b) + "秒");28 }29 }30 else if (iSecond/60>=1)31 {32 int e=Convert.ToInt32(iSecond) / 60;33 sb.Append(e + "分");34 int f = iSecond - e * 60;35 if (f>0)36 {37 sb.Append(f + "秒");38 }39 }40 else 41 {42 sb.Append(iSecond+"秒");43 }44 return sb.ToString();45 }
View Code

当右击托盘时,显示此菜单(及最小化时在任务栏中不出现,点击此菜单“显示”时,显示主界面,托盘消失):

1 private void toolStripMenuItem1_Click(object sender, EventArgs e)2         {3             this.WindowState = FormWindowState.Normal;4             //this.ShowInTaskbar = true;5             notifyIcon1.Visible = false;6             this.ShowInTaskbar = !notifyIcon1.Visible;7             this.Activate();8         }
View Code

 

转载于:https://www.cnblogs.com/chens2865/p/4452514.html

你可能感兴趣的文章
runC爆严重安全漏洞,主机可被攻击!使用容器的快打补丁
查看>>
Maximum Product Subarray
查看>>
shell 默认变量
查看>>
solr相关配置翻译
查看>>
通过beego快速创建一个Restful风格API项目及API文档自动化(转)
查看>>
解决DataSnap支持的Tcp长连接数受限的两种方法
查看>>
Synchronous/Asynchronous:任务的同步异步,以及asynchronous callback异步回调
查看>>
ASP.NET MVC5 高级编程-学习日记-第二章 控制器
查看>>
如何选择适合自己的云管理平台(一)
查看>>
Hibernate中inverse="true"的理解
查看>>
不同版本(2.3,2.4,2.5,3.0)的Servlet web.xml 头信息
查看>>
Java的String中的subString()方法
查看>>
selenium +chrome headless Adhoc模式渲染网页
查看>>
高级滤波
查看>>
使用arcpy添加grb2数据到镶嵌数据集中
查看>>
[转载] MySQL的四种事务隔离级别
查看>>
QT文件读写
查看>>
C语言小项目-火车票订票系统
查看>>
缓和曲线06七次四项式
查看>>
15.210控制台故障分析(解决问题的思路)
查看>>