1.創建"Windows窗體應用程序"項目,從"工具箱"中添加NotifyIcon(運行時期間在Windows任務欄右側的通知區域顯示圖標).鼠標右擊notifyIcon1屬性,為控件屬性Icon添加圖標,Text屬性為"CSDN".
2.添加ContextMenuStrip(當用戶右擊關聯控件時顯示快鍵菜單).鼠標右鍵contextMenuStrip1屬性,進入Items添加或右鍵"編輯項".添加3個toolStripMenuItem,設置其Text為"顯示窗體"、"隱藏窗體"、"退出".如下圖所示:
3.關聯系統托盤圖標與右鍵菜單.設置notifyIcon1的ContextMenuStrip屬性為contextMenuStrip1關聯兩個控件.運行程序,右下角任務欄的系統托盤處圖標點擊右鍵顯示如下圖所示:
窗體設置主要是當窗體點擊"退出"按鈕時,任務欄仍然顯示圖標且程序沒有退出.設置Form1的MaximizeBox(窗體是否能最大化)屬性設置為False,讓其不能最大化.並為Form1添加FormClosing(當用戶關閉窗體時,在窗體已關閉並制定關閉原因前發生)事件.如下圖所示.
添加代碼如下,主要實現的功能是當用戶點擊窗體"關閉"按鈕或通過Alt+F4快捷關閉時,取消關閉操作且窗體隱藏,任務欄圖標仍然顯示:
//窗體關閉前發生事件 private void Form1_FormClosing(object sender, FormClosingEventArgs e) { //窗體關閉原因為單擊"關閉"按鈕或Alt+F4 if (e.CloseReason == CloseReason.UserClosing) { e.Cancel = true; //取消關閉操作 表現為不關閉窗體 this.Hide(); //隱藏窗體 } }
其中:FormClosingEventArgs 類為FormClosing事件提供數據,其屬性Cancel獲取或設置是否應取消事件的值,CloseReason獲取一個值,該值指示關閉窗體的原因.(詳見MSDN
FormClosingEventArgs 類)
注意:添加的事件是Form_Closing-窗體關閉前發生,而不是Form_Closed窗體已關閉發生.它沒有e.Cancel屬性,會提示錯誤 "System.Windows.Forms.FormClosedEventArgs"不包含Cancel的定義.
常見的窗體最小化至任務欄(系統托盤)圖標的功能:
1.當鼠標左鍵點擊圖標時,顯示窗體.
2.當鼠標右鍵點擊圖標時,顯示"顯示窗體"\"隱藏窗體"\"退出"菜單欄,並有相對應的功能.
具體操作是:分別點擊"顯示窗體"\"隱藏窗體"\"退出"在其屬性欄中添加"Click"事件.添加代碼如下:
//"顯示窗體"單擊事件 private void toolStripMenuItem1_Click(object sender, EventArgs e) { this.Show(); //窗體顯示 this.WindowState = FormWindowState.Normal; //窗體狀態默認大小 this.Activate(); //激活窗體給予焦點 } //"隱藏窗體"單擊事件 private void toolStripMenuItem2_Click(object sender, EventArgs e) { this.Hide(); //隱藏窗體 } //"退出"單擊事件 private void toolStripMenuItem3_Click(object sender, EventArgs e) { //點擊"是(YES)"退出程序 if (MessageBox.Show("確定要退出程序?", "安全提示", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.Yes) { notifyIcon1.Visible = false; //設置圖標不可見 this.Close(); //關閉窗體 this.Dispose(); //釋放資源 Application.Exit(); //關閉應用程序窗體 } }其中,窗體的狀態FormWindowState有Minimized(最小化)、Maximized(最大化)、Normal(默認大小).有的程序設置sizechanged事件,當用戶點擊"最小化"按鈕窗體尺寸變化時才最小化至任務欄(系統托盤).但我認為打開程序時就有最小化圖標更好,同時添加FormClosing事件更符合用戶使用.點擊"退出"運行結果如下圖所示:
最後添加鼠標左鍵圖標顯示窗體功能.右鍵notifyIcon1屬性,添加MouseClick(鼠標單擊組件時發生)事件.添加代碼如下:
//鼠標左鍵圖標事件 private void notifyIcon1_MouseClick(object sender, MouseEventArgs e) { //點擊鼠標"左鍵"發生 if (e.Button == MouseButtons.Left) { this.Visible = true; //窗體可見 this.WindowState = FormWindowState.Normal; //窗體默認大小 this.notifyIcon1.Visible = true; //設置圖標可見 } }
源代碼如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WinFormMin { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //窗體關閉前發生事件 private void Form1_FormClosing(object sender, FormClosingEventArgs e) { //窗體關閉原因為單擊"關閉"按鈕或Alt+F4 if (e.CloseReason == CloseReason.UserClosing) { e.Cancel = true; //取消關閉操作 表現為不關閉窗體 this.Hide(); //隱藏窗體 } } //"顯示窗體"單擊事件 private void toolStripMenuItem1_Click(object sender, EventArgs e) { this.Show(); //窗體顯示 this.WindowState = FormWindowState.Normal; //窗體狀態默認大小 this.Activate(); //激活窗體給予焦點 } //"隱藏窗體"單擊事件 private void toolStripMenuItem2_Click(object sender, EventArgs e) { this.Hide(); //隱藏窗體 } //"退出"單擊事件 private void toolStripMenuItem3_Click(object sender, EventArgs e) { //點擊"是(YES)"退出程序 if (MessageBox.Show("確定要退出程序?", "安全提示", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.Yes) { notifyIcon1.Visible = false; //設置圖標不可見 this.Close(); //關閉窗體 this.Dispose(); //釋放資源 Application.Exit(); //關閉應用程序窗體 } } //鼠標左鍵圖標事件 private void notifyIcon1_MouseClick(object sender, MouseEventArgs e) { //點擊鼠標"左鍵"發生 if (e.Button == MouseButtons.Left) { this.Visible = true; //窗體可見 this.WindowState = FormWindowState.Normal; //窗體默認大小 this.notifyIcon1.Visible = true; //設置圖標可見 } } } }