首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 隱藏主視窗並僅顯示系統托盤圖示的三種方法

     編輯:關於C語言

WinForms 隱藏主表單最佳實踐

需求:應用程式啟動時不顯示主視窗,僅在系統通知區(托盤)顯示圖示,雙擊圖示再顯示視窗。本文比較三種作法優缺點。

方法一:覆寫 SetVisibleCore(簡單但限制多)

protected override void SetVisibleCore(bool value)
{
    base.SetVisibleCore(false); // 永遠不顯示
}
  • 優點:程式碼極少。
  • 缺點:視窗永不可見,需用 Application.Exit() 結束,無法正常切換顯示/隱藏。

方法二:不建立主表單,直接在 Main 建立 NotifyIcon(純手工)

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    NotifyIcon ni = new NotifyIcon();
    ni.Icon = Properties.Resources.AppIcon;
    ni.Text = "我的應用程式";
    ni.Visible = true;
    ni.DoubleClick += (s, e) => { /* 顯示設定視窗 */ };

    Application.Run(); // 無表單也能跑訊息迴圈
}
  • 優點:徹底無主視窗,資源輕量。
  • 缺點:所有 UI 元件需手動建立,維護困難。

方法三:OnActivated 隱藏 + NotifyIcon 切換(推薦)

private bool _firstLoad = true;

protected override void OnActivated(EventArgs e)
{
    if (_firstLoad)
    {
        this.Visible = false;      // 啟動時隱藏
        this.ShowInTaskbar = false; // 不顯示在工作列
        _firstLoad = false;
    }
    base.OnActivated(e);
}

private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
    if (this.Visible)
    {
        this.Hide();
        this.ShowInTaskbar = false;
    }
    else
    {
        this.Show();
        this.ShowInTaskbar = true;
        this.WindowState = FormWindowState.Normal;
        this.BringToFront();
    }
}
  • 優點:視窗可自由顯示/隱藏,支援 Alt+Tab 正常運作,生命週期正常。
  • 缺點:需處理首次載入時機。

總結建議

方法三平衡了開發便利性與使用者體驗,為最通用方案。搭配 ContextMenuStrip 可提供右鍵選單功能。

相關技巧: 開機自動啟動、單一執行個體應用、托盤氣球提示。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved