.NET編程技術——實驗06:窗體應用的最小化在Windows狀態欄中顯示托盤圖標

閱讀須知:純粹是本人啊Jun作爲初學者的筆記和個人對其中知識的複習,大神請繞道。微笑



實驗01:VS2015 對象瀏覽器的使用、簡單調試和斷點使用。

實驗04:RS485串口調試、基本控件使用、CRC算法應用

實驗05:RS485串口通訊,串口指令的收發應用,完成串口基礎功能,github地址:實驗05

實驗06:窗體應用的最小化在Windows狀態欄中顯示托盤圖標

實驗07:Windows的註冊表的基本使用方法,文件流保存爲文本文件基礎用法

實驗08:利用GDI+技術生成簡單驗證碼,類似excel的數據折線圖、並保存爲圖片

實驗09:Access數據庫的創建、表創建、MD5加密,數據、圖片保存在數據庫的用法

實驗10:將DataGridView表單數據保存爲excel文件,表單的基本格式化


包含實驗06~實驗10的功能:github地址:實驗10


那先來看一下實驗06的主要的題目吧。第 1 題純粹畫圖,還是不作考慮了。來看第 2 題,其中有一些我也選擇性不講了。


2、通過Windows Form項目,根據總體需求、總體結構和系統草圖,建立和開發出“XXX溫度監控軟件”,軟件的基本要求有:

(1)能用戶控制,有管理員,可以修改參數等,普通用戶只能採集和顯示數據,密碼直接寫在代碼中。系統啓動時,先顯示登錄窗體,密碼驗證成功後,再進入主窗體,要有密碼驗證失敗的截圖;

(2)主窗體中要有菜單、工具欄和狀態欄,菜單、工具欄要能根據不同用戶而改變,狀態欄中能顯示出當前時間和已登錄的用戶名,要有用戶切換截圖;

(3)主窗體的背景圖爲個人圖片,圖標爲個性化圖標;

(4)系統在最小化時,顯示爲Windows狀態欄中的托盤圖標。

(5)有“幫助”菜單,並實現相應的窗體,能顯示基本的幫助信息,並能持續更新。


我來說一下,第一題的用戶控制(1)能用戶控制,由於實驗06只是原型,我在後面的實驗不斷地將其優化了,所以之後

的實驗再討論這個。先來看一下後面實驗的登錄頁面的完整圖吧。由於還有驗證碼的功能,所以暫時在這不講




(2)主窗體中要有菜單、工具欄和狀態欄,菜單、工具欄要能根據不同用戶而改變,狀態欄中能顯示出當前時間和已登錄的用戶名,要有用戶切換截圖;

老師在將這個之前,關於菜單、工具欄和狀態欄,都做了介紹,在C#中添加菜單、工具欄和狀態欄也是非常的簡單,

還拿了VS2015做了模板示範



大家可以瞭解一下幾個控件:MenuStrip(菜單欄)、ToolStrip(工具欄)、StatusStrip(狀態欄),

操作起來也十分簡單。


(3)主窗體的背景圖爲個人圖片,圖標爲個性化圖標;



(4)系統在最小化時,顯示爲Windows狀態欄中的托盤圖標。

縮小後如圖所示,就好像QQ縮小的在 Windows 狀態欄會有你的圖片



上面那個是狀態欄,有時候我會傻傻分不清,任務欄和狀態欄,所以給自己普及一下。下面的是任務欄



這個QQ縮小的操作也是找了挺多的資料,其中SizeChanged 事件很重要,當你的窗體的尺寸變化都會觸發到這個事件


再來介紹兩個控件:NotifyIcon指定可在通知區域創建圖標的組件)、ContextMenuStrip內容菜單欄



/// <summary>
/// 判斷是否最小化,然後顯示托盤
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MainForm_SizeChanged(object sender, EventArgs e)
{
    if(WindowState == FormWindowState.Minimized)  //當這個窗體的尺寸狀態爲最小化的時候
    {
        this.ShowInTaskbar = false;  // 最小化的時候,任務欄不顯示
        notifyIcon1.Visible = true;  //控件 NotifyIcon 可視
    }
}


當窗體縮小成圖標在Windows狀態欄的時候,我想鼠標左鍵點擊一下,窗體重新顯示給我看,怎麼辦呢?

看代碼。這裏用到鼠標事件,其實鼠標事件我在學JS的時候認識的。

/// <summary>
/// 添加雙擊托盤圖標事件(雙擊顯示窗口)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
{
    if(e.Button == MouseButtons.Left)
    {
        WindowState = FormWindowState.Normal;//還原窗體顯示
        this.Visible = true;
        //this.Activate();  //激活窗體並給予它焦點
        this.ShowInTaskbar = true; //任務欄顯示圖標       
    }
            
}


好吧,只是鼠標左鍵點擊一下就行了嗎,就這麼簡單?

還沒呢~~ 我們常見的軟件除了左鍵點擊狀態欄的圖標顯示窗體外,其實還會有鼠標右擊的軟件任務欄。如圖下




哈哈,這個功能就要提到另一個控件ContextMenuStrip (內容菜單欄)。NotifyIconContextMenuStrip常常配合來使用的

看圖,留意到Windows狀態欄的圖標默認是右鍵點擊會顯示ContextMenuStrip



ContextMenuStrip 的操作其實不算難,但有點兒繞,不是很直接能理解。

“打開窗體” 和 “退出程序” 其實是ContextMenuStrip 的屬性Item中加上去的。點擊 Item 後 ,就可以看到裏面有兩個目錄



    點擊“添加”按鈕就可以添加目錄的子項





ok了,ContextMenuStrip 的基本功能就講到這裏吧,“打開窗體” 和 “退出程序” 其實就是點擊事件。



“打開窗體” 的點擊事件代碼如下:

/// <summary>
/// 顯示窗體
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void showToolStripMenuItem_Click(object sender, EventArgs e)
{
    WindowState = FormWindowState.Normal;
}


“退出程序” 的點擊事件代碼如下

/// <summary>
/// 托盤右鍵退出程序
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void quitToolStripMenuItem_Click(object sender, EventArgs e)
{
    this.Dispose();
    this.Close();
}

這個(4)系統在最小化時,顯示爲Windows狀態欄中的托盤圖標。功能在上一次實驗就加上去了,

可以參考一下Github:串口調試助手基礎版


實驗06完成奮鬥,如果有疑問或者在哪些地方有錯誤的,歡迎大家指出,共同學習,共同進步。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章