Form最小化是指整個Form都縮小到任務欄上,但是窗體以Form的標題欄形式顯示在任務欄上, 若是想讓Form以Icon的形式顯示在任務欄右下角,則需要給Form添加一個NotifyIcon控件。
一、添加NotifyIcon控件
1 如下圖為窗體添加一個 NotifyIcon 控件,並指定 Icon 和 Text 屬性,如下圖:
2 在需要窗體最小化到托盤的處理代碼中,添加如下代碼:
if(this.WindowState==FormWindowState.Normal&&this.Visible==true) { this.notifyIcon1.Visible=true;//在通知區顯示Form的Icon this.WindowState=FormWindowState.Minimized; this.Visible=false; this.ShowInTaskbar=false;//使Form不在任務欄上顯示 }
3 可以為 添加NotifyIcon控件指定雙擊事件,雙擊還原,代碼如下:
/// <summary> /// 添加雙擊托盤圖標事件(雙擊顯示窗口) /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) { if (WindowState == FormWindowState.Minimized) { //還原窗體顯示 WindowState = FormWindowState.Normal; //激活窗體並給予它焦點 this.Activate(); //任務欄區顯示圖標 this.ShowInTaskbar = true; //托盤區圖標隱藏 notifyIcon1.Visible = false; } }
4 關閉窗體詢問是否直接退出或者最小化到托盤
/// <summary> /// 判斷是否最小化,然后顯示托盤 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void F_Main_SizeChanged(object sender, EventArgs e) { //判斷是否選擇的是最小化按鈕 if (WindowState == FormWindowState.Minimized) { //隱藏任務欄區圖標 this.ShowInTaskbar = false; //圖標顯示在托盤區 notifyIcon1.Visible = true; } } /// <summary> /// 確認是否退出 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void F_Main_FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show("是否確認退出程序?", "退出", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) { // 關閉所有的線程 this.Dispose(); this.Close(); } else { e.Cancel = true; } }
二、添加 ContextMenuStrip 控件
1 在窗體添加一個 ContextMenuStrip 控件,然后添加控件菜單項,最后綁定給 NotifyIcon 控件即可,如下:
2 綁定菜單給 NotifyIcon 控件,如下圖:
3 為 ContextMenuStrip 控件的菜單項指定單擊事件,如下:
/// <summary> /// 托盤右鍵顯示主界面 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void 顯示ToolStripMenuItem_Click(object sender, EventArgs e) { WindowState = FormWindowState.Normal; } /// <summary> /// 托盤右鍵退出程序 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void 退出ToolStripMenuItem_Click(object sender, EventArgs e) { if (MessageBox.Show("是否確認退出程序?", "退出", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) { // 關閉所有的線程 this.Dispose(); this.Close(); } }
三、為 NotifyIcon 控件添加單擊事件,控制菜單的顯示及窗口的還原,代碼如下:
private void myIcon_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { myMenu.Show(); } if (e.Button == MouseButtons.Left) { this.Visible = true; this.WindowState = FormWindowState.Normal; } }