2011-04-30 106 views
0

我正在寫一個程序在vb.net使用系統托盤,我想實現的是以下內容。幫助積極的形式

如果系統托盤圖標被點擊,它應該最小化/恢復表單。 (這我可以做) 我堅持的一點是,如果表單是'開放'而沒有集中,我希望它獲得焦點而不是最小化。

我似乎無法找到任何測試我需要看看如果表單不是處於最小化狀態,並沒有焦點。

歡迎任何建議。

謝謝

+0

經過一番搜索後,我想我有一個答案我的問題。雖然我遇到了另一個相關的問題。因爲單擊任務欄圖標的行爲會導致表單失去焦點,所以我的測試總是返回focus = false。所以我需要看看在鼠標點擊之前它是否有焦點。 – user732467 2011-04-30 15:06:11

回答

0

通過監聽Activate和Deactivate事件跟蹤窗體激活狀態。一個複雜因素是,當您單擊圖標時,表單將被取消激活。通過記錄它發生的時間來解決這個問題。像這樣:

Public Class Form1 
    Private IsActivated As Boolean 
    Private DeActivation As DateTime 

    Protected Overrides Sub OnActivated(e As System.EventArgs) 
     IsActivated = True 
     MyBase.OnActivated(e) 
    End Sub 

    Protected Overrides Sub OnDeactivate(e As System.EventArgs) 
     IsActivated = False 
     DeActivation = DateTime.Now 
     MyBase.OnDeactivate(e) 
    End Sub 

    Private Sub NotifyIcon1_MouseClick(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseClick 
     If Me.WindowState = FormWindowState.Minimized Then 
      Me.WindowState = FormWindowState.Normal 
     Else 
      If IsActivated OrElse DateTime.Now - DeActivation < New TimeSpan(0, 0, 1) Then 
       Me.WindowState = FormWindowState.Minimized 
      Else 
       Me.Activate() 
      End If 
     End If 

    End Sub 
End Class 

這是一個相當不愉快的破解,必須將窗體的ShowInTaskbar屬性設置爲False。有可能有一個任務欄按鈕,並仍然保持形式在啓動時不可見。檢查this answer的方法。

+0

謝謝。這看起來像我後,是在一半,但沒有考慮使用時間。 – user732467 2011-04-30 17:58:24