對這個需求完全可以在單擊“關閉”按鈕的時候彈出一個對話框,來讓用戶確定是否真的要退出。這是一個很好的解決方法,並且實現也是很容易的。但是人家不想這樣,想要擁有類似QQ在托盤區後台運行的那種效果,沒辦法,只能想辦法來實現了。www.2cto.com 其實,這個在網上也有很多的實現方法,但是我試了試有些直接復制過來並不能直接運行,或者能運行的吧又沒有注釋。今天在這裡就給大家貼一下我的代碼,也有不足之處,希望大家給出意見. [csharp] using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Windows; namespace winform窗體托盤後台運行 { public partial class Form1 : Form { //這裡在窗體上沒有拖拽一個NotifyIcon控件,而是在這裡定義了一個變量 private NotifyIcon notifyIcon = null; public Form1() { InitializeComponent(); //調用初始化托盤顯示函數 InitialTray(); } private void Form1_Load(object sender, EventArgs e) { //這裡寫其他代碼 } www.2cto.com /// <summary> /// 窗體關閉的單擊事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form1_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = true; //通過這裡可以看出,這裡的關閉其實不是真正意義上的“關閉”,而是將窗體隱藏,實現一個“偽關閉” this.Hide(); } private void InitialTray() { //隱藏主窗體 this.Hide(); //實例化一個NotifyIcon對象 notifyIcon = new NotifyIcon(); //托盤圖標氣泡顯示的內容 notifyIcon.BalloonTipText = "正在後台運行"; //托盤圖標顯示的內容 notifyIcon.Text = "窗體托盤後台運行測試程序"; //注意:下面的路徑可以是絕對路徑、相對路徑。但是需要注意的是:文件必須是一個.ico格式 notifyIcon.Icon = new System.Drawing.Icon("E:/ASP項目/images/3.5 inch Floppy.ico"); //true表示在托盤區可見,false表示在托盤區不可見 notifyIcon.Visible = true; //氣泡顯示的時間(單位是毫秒) notifyIcon.ShowBalloonTip(2000); notifyIcon.MouseClick += new System.Windows.Forms.MouseEventHandler(notifyIcon_MouseClick); ////設置二級菜單 //MenuItem setting1 = new MenuItem("二級菜單1"); //MenuItem setting2 = new MenuItem("二級菜單2"); //MenuItem setting = new MenuItem("一級菜單", new MenuItem[]{setting1,setting2}); //幫助選項,這裡只是“有名無實”在菜單上只是顯示,單擊沒有效果,可以參照下面的“退出菜單”實現單擊事件 MenuItem help = new MenuItem("幫助"); //關於選項 MenuItem about = new MenuItem("關於"); //退出菜單項 MenuItem exit = new MenuItem("退出"); exit.Click += new EventHandler(exit_Click); ////關聯托盤控件 //注釋的這一行與下一行的區別就是參數不同,setting這個參數是為了實現二級菜單 //MenuItem[] childen = new MenuItem[] { setting, help, about, exit }; MenuItem[] childen = new MenuItem[] {help,about,exit}; notifyIcon.ContextMenu = new ContextMenu(childen); //窗體關閉時觸發 this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); } /// <summary> /// 鼠標單擊 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void notifyIcon_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e) { //鼠標左鍵單擊 if (e.Button == MouseButtons.Left) { //如果窗體是可見的,那麼鼠標左擊托盤區圖標後,窗體為不可見 if (this.Visible == true ) { this.Visible = false; } else { this.Visible = true; this.Activate(); } } } /// <summary> /// 退出選項 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void exit_Click(object sender, EventArgs e) { //退出程序 System.Environment.Exit(0); } } }