2010-06-05 107 views
4

我有一個.net窗體窗體應用程序需要直接打開通知圖標(系統托盤)沒有可見的窗口。我意識到我可以在顯示的事件或類似事件中執行此操作。但如果我這樣做,我會看到一扇窗戶。我該如何避免這種閃光?我曾試圖改變我的Program.cs文件看起來像這樣:如何啓動.net窗體窗體應用程序沒有可見的窗口?

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

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

然而,這並不工作,要麼因爲Application.Run()使窗體可見。我很確定有一個簡單的答案,我錯過了。任何幫助是極大的讚賞。

回答

4

Application.Run()沒有參數的超載,因此不會立即在應用程序啓動時顯示錶單。當然,你必須管理導致應用程序終止的原因,因爲它沒有初始或「主要」形式來監視它。例如,它會是您的通知圖標,我相信您可以處理。

+0

這就是我所需要的,儘管我在那個表單上使用了一個計時器,現在不能工作,所以我有一些應用程序重組。謝謝您的幫助! – 2010-06-05 01:05:52

1

您可以嘗試將frm上的WindowState設置爲最小化,並將ShowInTaskbar設置爲false。 此外,我不是專家,但我認爲你應該處理MainForm構造函數中的可見性邏輯。

+0

在調用窗體類構造函數之後,Application.Run將覆蓋任何可見性爲true。 – 2010-06-05 00:50:15

+0

啊 - 很高興知道! – Matt 2010-06-05 01:46:45

+0

哇!在設計器屬性中設置WindowState = Minimized和ShowInTaskbar = false!如此簡單而有效! – AlfredBr 2010-06-05 04:05:15

3

如果您在啓動應用程序時不需要主窗體,則可以使用here is a link來描述如何創建只需一個NotifyIcon。

0

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

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 
    } 
} 
0

也許有點hackish,但您可以創建一個無國界的表格(FormBorderStyle.None),並設置它的TransparencyKey到它的BackColor,禁用ShowInTaskbar,然後給那個形式Application.Run()。瞧。 :)

相關問題