1.在主窗體中添加一個 NotifyIcon 控件-notifyIcon1
2.在主窗體中添加一個 ContextMenu 控件-contextMenu1,并添加菜單項
3.設定 notifyIcon1 的屬性:
将notifyIcon1.ContextMenu 設定為 contextMenu1
notifyIcon1.Visible = true
notifyIcon1.Icon 設定到一個圖示檔案
3.處理主窗體的closing事件,即關閉主窗體時就最小化到系統托盤
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
e.Cancel = true; //取消窗體關閉事件
this.Visible = false; //隐藏主窗體
}
4.在系統托盤中主窗體的圖示上單擊右鍵,出現上下文菜單(contextMenu1)
在某個菜單項的方法中,確定可以恢複主窗體
private void menuItem1_Click(object sender, System.EventArgs e)
{
this.Visible = true; //恢複主窗體
}
在某個菜單項的方法中,確定可以退出程式
private void menuItem2_Click(object sender, System.EventArgs e)
{
Application.Exit();
}
5.也可以不使用上下文菜單來恢複窗體,直接處理notifyIcon1的DoubleClik事件(輕按兩下恢複主窗體)
private void notifyIcon1_DoubleClick(object sender, System.EventArgs e)
{
if (this.Visible == false)
{
this.Visible = true;
}
}
其中退出程式的那部分代碼是有問題的
Application.Exit();還是不能退出應用程式
有人說原因在于Application.Exit還是會去調用closing 結果是被阻止關閉了,就有人用了dispose 确實能退出。
經過跟蹤确實是的。
但還是有好多疑問
MSDN上對Application.Exit的解釋是這樣的:
Exit 方法停止在所有線程上運作的所有消息循環,并關閉應用程式的所有視窗。該方法并不強制退出該應用程式。Exit 方法通常從一個消息循環内調用,該方法強制 Run 傳回。若要隻退出目前線程的某個消息循環,請調用 ExitThread。
Exit 引發下列事件并執行關聯的條件操作:
- 為 OpenForms 屬性表示的各個窗體引發 FormClosing 事件。可以通過将這些窗體的 FormClosingEventArgs 參數的 Cancel 屬性設定為 true,取消此事件。
- 如果多個處理程式的其中之一取消該事件,則 Exit 将傳回而無進一步操作。否則,将為每個打開的窗體引發 FormClosed 事件,然後關閉所有正在運作的消息循環和窗體。
注意: |
---|
Exit 方法不會引發 Closed 和 Closing 事件,這兩個事件自 .NET Framework 2.0 起已過時。 這樣的解釋說明讓我看的雲裡霧裡的,有點懵了。還請牛人指教。 |