1. 程式人生 > >C#-WinForm設定托盤程式

C#-WinForm設定托盤程式

背景

現在很多程式都有這樣的托盤程式
窗體關閉時,並不真正關閉程式,只是工作列不顯示該應用程式,在右下側托盤裡顯示;
雙擊托盤,窗體還原;
右擊窗體,出現托盤選單,實現最小化,最大戶,還原,退出等。
這樣的功能C#winform怎樣實現呢 ?

實現

WinForm中托盤選單由NotifyIcon控制元件來實現,右鍵選單由contextMenuStrip來實現,我們將二者相關聯,即可實現我們所期望功能的托盤程式。

新增控制元件

我們在需要托盤的form介面上拖入NotifyIcon和一個ContextMenuStrip控制元件。
拖入控制元件

設定控制元件資訊

設定控制元件的屬性為我們期望的功能,
如本例中NotifyIcon控制元件名NAME為“mainNotifyIcon”,ContextMenuStrip控制元件名NAME為”mainNotifyContextMenuStrip”)
托盤程式控制元件

Icon為托盤圖示,Text托盤顯示文字,ContextMenuStrip右鍵選單(退出),設定退出單擊事件,我們將mainNotifyIcon的ContextMenuStrip屬性設定為mainNotifyContextMenuStrip,即可實現該托盤與右鍵選單的關聯,在托盤上右鍵即出現右鍵選單

我們開始新增右鍵選單的各個選項,比如:最小化,最大化,還原,退出等
右鍵選單

實現事件關聯

新增主窗體關閉事件(FormClosing)

新增主窗體關閉事件

        //  只有Form_Closing事件中 e.Cancel可以用。
        //  你的是Form_Closed事件。 Form_Closed事件時視窗已關了 ,Cancel沒用了;
// Form_Closing是視窗即將關閉時詢問你是不是真的關閉才有Cancel事件 private void MainWindow_FormClosing(object sender, FormClosingEventArgs e) { // 注意判斷關閉事件reason來源於窗體按鈕,否則用選單退出時無法退出! if (e.CloseReason == CloseReason.UserClosing) { //取消"關閉視窗"事件 e.Cancel = true
; // 取消關閉窗體 //使關閉時視窗向右下角縮小的效果 this.WindowState = FormWindowState.Minimized; this.mainNotifyIcon.Visible = true; //this.m_cartoonForm.CartoonClose(); this.Hide(); return; } }

這樣我們就實現了單擊關閉時,不真正關閉程式,而是將主介面隱藏HIDE掉,同時開始顯示托盤選單。

實現雙擊托盤開啟主程式

實現雙擊托盤開啟主程式

        //  新增托盤程式
        //  版本更新自1.0.1
        private void mainNotifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (this.Visible)
            {
                this.WindowState = FormWindowState.Minimized;
                this.mainNotifyIcon.Visible = true;
                this.Hide();
            }
            else
            {
                this.Visible = true;
                this.WindowState = FormWindowState.Normal;
                this.Activate();
            }
        }

右鍵選單實現最小化最大化還原和退出

//  新增托盤程式右鍵選單項
        //  版本更新自1.0.1
        //  最小化
        //  新增日期 --  2015-07-29 21:40
        private void toolStripMenuItemMinimize_Click(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Minimized;
            this.mainNotifyIcon.Visible = true;
            this.Hide();
        }

        //  新增托盤程式右鍵選單項
        //  版本更新自1.0.1
        //  最大化
        //  新增日期 --  2015-07-29 21:41
        private void toolStripMenuItemMaximize_Click(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Maximized;
            this.mainNotifyIcon.Visible = true;
            this.Show();
        }

        //  新增托盤程式右鍵選單項
        //  版本更新自1.0.1
        //  還原
        //  新增日期 --  2015-07-29 21:43
        private void toolStripMenuItemNormal_Click(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Normal;
            this.mainNotifyIcon.Visible = true;
            //this.m_cartoonForm.CartoonShowNormal();
            this.Show();
        }

        //  新增托盤程式右鍵選單項
        //  版本更新自1.0.1
        //  退出
        //  新增日期 --  2015-07-29 21:44
        private async void toolStripMenuItemQuit_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("你確定要退出?", "系統提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
            {

                this.mainNotifyIcon.Visible = false;
                this.Close();
                this.Dispose();
                System.Environment.Exit(System.Environment.ExitCode);   

            }
        }
    }