讓WindowsForm縮小到系統匣

讓WindowsForm縮小到系統匣

如何讓windowsForm能像MSN一樣縮小後會跑到右下方的系統匣內,

只要利用NotifyIcon就可以做到相同的功能,MSDN NotifyIcon元件說明

首先先開啟一個windowsForm專案,在工具列將NotifyIcon拉到windowsForm上。

image

image

接著先為NotifyIcon指定Icon和Text,就是在系統匣會出現的小圖和滑鼠移過去時出現的文字。

image

執行結果

image 

 

如果要在視窗縮小時,只顯示在系統匣顯示,

反之則變成只顯示在工作列,就必須要在Form的SizeChanged事件做控制:

將NotifyIcon 的Visible預設為false


 private void Form1_SizeChanged(object sender, EventArgs e)
        {
            bool isMin = this.WindowState == FormWindowState.Minimized;//視窗是否為最小化
            this.notifyIcon1.Visible = isMin;//是否顯示在系統匣
            this.ShowInTaskbar = !isMin;//是否顯示在工作列
            if (isMin)
                this.Hide();//隱藏主視窗
        }

 

這樣如果把視窗縮小後,會沒辦法再叫回來,但可以利用NotifyIcon的MouseDoubleClick事件,

讓滑鼠左鍵點選系統匣圖示兩下就恢復正常視窗。


        private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                this.Show();
                this.WindowState = FormWindowState.Normal;
            }
      
        }

接著還可以為NotifyIcon加ContextMenuStrip,從工具列中拉一個ContextMenuStrip到設計視窗,並設計一些選項進去,

並將NotifyIcon的ContextMenuStrip設定成剛剛拉出來的ContextMenuStrip。

image

image

 

執行結果~

image

 

NotifyIcon還可以加上氣球提示效果,假設在視窗縮小的時候可跳出一個氣球提示告知使用者~

Icon

image

在之前隱藏主視窗的地方再加一行CODE~


if (isMin)
            {
                this.Hide();//隱藏主視窗
                this.notifyIcon1.ShowBalloonTip(2000);//氣球提示2秒鐘
            }

執行結果~

image

嗯…杯具完了~~