2010-12-09 19 views
3

我想用熱鍵做一個應用程序,並在任務欄托盤中啓動一個選項。C#隱藏()在啓動時,沒有ShowInTaskbar到假

現在的問題是,在load事件中使用this.Hide()不會產生任何影響。我可以添加this.ShowInTaskbar = false,但在將其設置爲true後,爲了顯示窗口,它會禁用我的熱鍵。

有沒有其他方法可以在啓動時隱藏我的表單,或者防止我的熱鍵取消註冊?

我的代碼隱藏形式:

private void frmMain_Load(object sender, EventArgs e) 
{ 
    if (StartBG()) 
    { 
     this.Hide(); 
     this.ShowInTaskbar = false; 
     notifyIcon.Visible = true; 
     notifyIcon.ShowBalloonTip(3000, "Kore screenshots", "The application is started and will run on the background.", ToolTipIcon.Info); 
    } 
} 

上面的代碼,熱鍵仍然工作後,

private void showform() 
{ 
    this.Show(); 
    this.ShowInTaskbar = true; 
    notifyIcon.Visible = false; 
    this.WindowState = FormWindowState.Normal; 
} 

此代碼後,熱鍵被禁用。

回答

4

我過去所做的是創建一個單獨的窗體,它總是被最小化並且ShowInTaskbar爲false(因此它從來不是用戶可見的),並且此窗體擁有NotyifyIcon。

然後,我想要顯示的任何用戶界面,我開發爲單獨的窗體,根據需要顯示/隱藏。我發現這個工作比試圖獲得一個表單可以顯示/隱藏/顯示在taskabr /擁有一個notifyicon更乾淨。

3

防止窗體變得可見,但仍然創建其Handle,以便通知圖標​​有效,需要重寫SetVisibleCore()。就像這樣:

protected override void SetVisibleCore(bool value) { 
     if (value && !this.IsHandleCreated) { 
      value = false; 
      CreateHandle(); 
      // Put your Load event code here 
      //... 
     } 
     base.SetVisibleCore(value); 
    } 

當心Load事件或的OnLoad()方法將不能運行,直到形式實際上變得可見後。因此,將您獲得的任何代碼移入此覆蓋。