簡體   English   中英

如何在沒有可見窗口的情況下啟動.net Windows窗體應用程序?

[英]How do I launch .net windows forms application with no visible windows?

我有一個.net Windows窗體應用程序,需要直接打開通知圖標(系統托盤),沒有可見的窗口。 我意識到我可以在onshown事件或類似事件中執行此操作。 但如果我這樣做,我會得到一個窗口的閃光。 我怎么能避免那個閃光燈? 我已經嘗試修改我的Program.cs文件,如下所示:

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);

MainForm frm = new MainForm();
frm.Visible = false;
Application.Run(frm);

但是這不起作用,因為Application.Run()使表單可見。 我很確定我會錯過一個簡單的答案。 任何幫助是極大的贊賞。

Application.Run()有一個重載,它不接受任何參數,因此在應用程序啟動時不會立即顯示表單。 當然,您必須管理導致應用程序自行終止的原因,因為它沒有初始或“主要”形式供其監控。 所以例如它是你的通知圖標,我相信你能夠處理它。

如果您在啟動應用程序時不需要主表單,則可以在此處鏈接到描述如何創建NotifyIcon的文章。

您可以嘗試將frm上的WindowState設置為Minimized,同時將ShowInTaskbar設置為false。 另外,我不是專家,但我認為你應該處理MainForm構造函數中的可見性邏輯。

這是我所擁有的表單的初始化方法的代碼片段。 應用程序在托盤中運行,當用戶雙擊通知圖標時,窗口會顯示。 我有處理調整大小等的方法,確保只能通過菜單選項關閉表單。

public MainForm()
{
  ...code
  Resize += MainForm_Resize;
  notifyIcon.DoubleClick += NotifyIconDoubleClick;
  WindowState = FormWindowState.Minimized;
  Hide();
}
private void MainForm_Resize(object sender, EventArgs e)
{
  if (FormWindowState.Minimized == WindowState)
     Hide();
}

private void NotifyIconDoubleClick(object sender, EventArgs e)
{
   Show();
   try
   {
      WindowState = FormWindowState.Normal;
      ...more code for other stuff
    }catch(yadda yadda)
      ...code
    }
 }

也許有點hackish,但你可以創建一個無邊框Form( FormBorderStyle.None )並將它的TransparencyKey設置為它的BackColor ,禁用ShowInTaskbar ,然后將該表單提供給Application.Run()。 瞧。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM