日常開發有時候需要實現窗口最小化到系統托盤,本文就來講講該如何實現winfrom最小化到系統托盤,本例子基于VS2019編寫。
用C#開發winform桌面程序時,程序啟動后,默認是顯示在桌面而且在任務欄中有對應的圖標。有的時候,需要在程序最小行后,將程序圖標僅僅顯示在系統托盤,不在任務欄中顯示。
Form最小化是指整個Form都縮小到任務欄上,但是窗體以Form的標題欄形式顯示在任務欄上, 若是想讓Form以Icon的形式顯示在任務欄右下角,則需要給Form添加一個NotifyIcon控件。
新建winform項目
打開VS2019,創建“新項目”->“windows窗體應用(.NET Framework)”。
添加NotifyIcon控件
1 如下為窗體添加一個 NotifyIcon 控件,并指定 Icon 和 Text 屬性
this.notifyIcon1.ContextMenuStrip?=?this.contextMenuStrip1;this.notifyIcon1.Icon?=?((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon")));this.notifyIcon1.Text?=?"文書助手";this.notifyIcon1.Visible?=?true;this.notifyIcon1.Click?+=?new?System.EventHandler(this.notifyIcon1_Click);this.notifyIcon1.DoubleClick?+=?new?System.EventHandler(this.notifyIcon1_DoubleClick);this.notifyIcon1.MouseClick?+=?new?System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseClick);
2 可以為 添加NotifyIcon控件指定雙擊事件,雙擊還原,代碼如下:
private?void?notifyIcon1_DoubleClick(object?sender,?EventArgs?e){if?(WindowState?==?FormWindowState.Minimized){//還原窗體顯示????WindowState?=?FormWindowState.Normal;//激活窗體并給予它焦點this.Activate();//任務欄區顯示圖標this.ShowInTaskbar?=?true;//托盤區圖標隱藏//??notifyIcon1.Visible?=?false;}}
3 關閉窗體詢問是否直接退出或者最小化到托盤
private?void?toolStripMenuItem2_Click(object?sender,?EventArgs?e){if?(MessageBox.Show("是否確認退出程序?",?"退出",?MessageBoxButtons.OKCancel,?MessageBoxIcon.Question)?==?DialogResult.OK){//?關閉所有的線程this.Dispose();this.Close();}}
添加 ContextMenuStrip 控件
1 在窗體添加一個 ContextMenuStrip 控件,然后添加控件菜單項,最后綁定給 NotifyIcon 控件即可,如下:
this.contextMenuStrip1.Items.AddRange(new?System.Windows.Forms.ToolStripItem[]?{this.toolStripMenuItem1,this.toolStripMenuItem2});this.contextMenuStrip1.Name?=?"contextMenuStrip1";this.contextMenuStrip1.Size?=?new?System.Drawing.Size(101,?48);
2 綁定菜單給 NotifyIcon 控件
this.notifyIcon1.ContextMenuStrip?=?this.contextMenuStrip1;
3 為 ContextMenuStrip 控件的菜單項指定單擊事件,如下:
private?void?toolStripMenuItem1_Click(object?sender,?EventArgs?e){WindowState?=?FormWindowState.Normal;//任務欄區顯示圖標this.ShowInTaskbar?=?true;}
為 NotifyIcon 控件添加單擊事件
控制菜單的顯示及窗口的還原,代碼如下:
private?void?notifyIcon1_MouseClick(object?sender,?MouseEventArgs?e){if?(e.Button?==?MouseButtons.Right){contextMenuStrip1.Show();}if?(e.Button?==?MouseButtons.Left){this.Visible?=?true;this.WindowState?=?FormWindowState.Normal;this.ShowInTaskbar?=?true;}}
注意事項
“ContextMenuStrip”和“notifyIcon”若不是必要,請不要創建多個。
“notifyIcon”圖標需要.icon格式