我正在寫一個程序在vb.net使用系統托盤,我想實現的是以下內容。幫助積極的形式
如果系統托盤圖標被點擊,它應該最小化/恢復表單。 (這我可以做) 我堅持的一點是,如果表單是'開放'而沒有集中,我希望它獲得焦點而不是最小化。
我似乎無法找到任何測試我需要看看如果表單不是處於最小化狀態,並沒有焦點。
歡迎任何建議。
謝謝
我正在寫一個程序在vb.net使用系統托盤,我想實現的是以下內容。幫助積極的形式
如果系統托盤圖標被點擊,它應該最小化/恢復表單。 (這我可以做) 我堅持的一點是,如果表單是'開放'而沒有集中,我希望它獲得焦點而不是最小化。
我似乎無法找到任何測試我需要看看如果表單不是處於最小化狀態,並沒有焦點。
歡迎任何建議。
謝謝
通過監聽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的方法。
謝謝。這看起來像我後,是在一半,但沒有考慮使用時間。 – user732467 2011-04-30 17:58:24
經過一番搜索後,我想我有一個答案我的問題。雖然我遇到了另一個相關的問題。因爲單擊任務欄圖標的行爲會導致表單失去焦點,所以我的測試總是返回focus = false。所以我需要看看在鼠標點擊之前它是否有焦點。 – user732467 2011-04-30 15:06:11