在開發 Windows 桌面應用程式時,將視窗最小化到系統托盤(System Tray)是常見的使用者體驗需求。這不僅能節省工作列空間,也能讓程式持續在背景運作。本文將詳細說明如何在 C# WinForm 專案中使用 NotifyIcon 元件實現此功能,並提供完整的程式碼範例供參考。
NotifyIcon 是 WinForm 專門用於在系統托盤顯示圖示的元件。它位於工具箱的「元件」分類中,拖曳到表單後會顯示在設計介面底部的元件列。
NotifyIcon 元件至表單。Visible = false(預設隱藏)、Text 設定滑鼠懸停時顯示的提示文字、Icon 指定托盤顯示的圖示檔(.ico)。當使用者點擊最小化按鈕時,攔截事件並隱藏表單、顯示托盤圖示:
private void Form1_SizeChanged(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
this.ShowInTaskbar = false; // 從工作列移除
notifyIcon1.Visible = true; // 顯示托盤圖示
}
}
使用者雙擊托盤圖示時,將視窗還原並隱藏托盤圖示:
private void notifyIcon1_DoubleClick(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
this.ShowInTaskbar = true;
this.WindowState = FormWindowState.Normal;
notifyIcon1.Visible = false;
}
}
為了提供更完整的互動,可以為托盤圖示加入右鍵選單(ContextMenu),包含「顯示視窗」與「退出系統」選項:
private ContextMenu notifyIconMenu;
private void InitializeNotifyIconMenu()
{
MenuItem[] items = new MenuItem[3];
items[0] = new MenuItem("顯示視窗");
items[0].Click += notifyIcon_ShowForm;
items[1] = new MenuItem("-"); // 分隔線
items[2] = new MenuItem("退出系統");
items[2].Click += ExitApplication;
items[2].DefaultItem = true; // 粗體預設項目
notifyIconMenu = new ContextMenu(items);
notifyIcon1.ContextMenu = notifyIconMenu;
}
private void notifyIcon_ShowForm(object sender, EventArgs e)
{
this.Show();
this.WindowState = FormWindowState.Normal;
this.ShowInTaskbar = true;
notifyIcon1.Visible = false;
}
private void ExitApplication(object sender, EventArgs e)
{
notifyIcon1.Visible = false;
Application.Exit(); // 正確關閉應用程式
}
在表單的 Load 事件中呼叫 InitializeNotifyIconMenu(),並在 SizeChanged 事件中整合選單初始化邏輯,即可擁有一個功能完整的托盤最小化機制。
Icon 屬性已正確指定 .ico 檔案,且檔案已設為「複製到輸出目錄」。SizeChanged 中重複建立 ContextMenu,建議在 Load 時一次性初始化。Application.Exit() 而非 this.Close(),確保所有執行緒與資源正確釋放。掌握這項技巧,能讓你的 WinForm 應用程式更符合現代 Windows 應用的使用習慣,提升使用者體驗。