我的應用程序通知圖標相應地顯示並隱藏主應用程序窗口。但是,當打開一個模式對話框時(這可以是關於對話框或設置對話框,僅舉幾例),我想要模態對話框來獲得焦點,而不是顯示/隱藏主應用程序窗口。如何將焦點的模式對話框點擊C#中的通知圖標?
模式對話框以form.ShowDialog(this)
打開。假設我用該代碼打開關於窗口,然後在不關閉它的情況下移動到另一個應用程序。當我回來時,如果我點擊通知圖標,我希望我的應用程序能夠獲得焦點。更好的是,我想要模態對話框來獲得焦點原因,因爲它是模態的,我無法使用父窗體。
我跟蹤一個簡單的bool
變量,如果任何窗體(關於,設置等)被打開,當我點擊通知圖標時,我檢查該變量。如果這是真的,我會做一些像mainForm.Activate()
。這實際上將主窗體和模態對話框帶到前面,唯一的問題是它不會集中模態對話框。
如何在不跟蹤打開哪個模式對話框的情況下解決此問題並致電.Activate()
?導致這將是一種痛苦...
問題是,這些模態對話框中的某些與關於/設置不完全相同。其中一些是我使用的庫中的任務對話框,我相信它使用Vista中引入的新的任務對話框API。那些沒有Activate事件。 – 2010-08-15 16:27:08
任務對話框是否有一個公共的SetFocus()函數?如果沒有,你可以將焦點設置爲一個控件,一個按鈕,一個文本框,以及對話框中需要關注的任何類型的控件嗎?我想你可以通過序號獲得控制權;可以說,「第一控制」,所以它將是一個通用的解決方案。也就是說,不是綁定到特定的對話框。 – JustBoo 2010-08-15 16:36:31
不幸的是,沒有任何對話框,也沒有任何控制需要關注:(但我認爲我通過訴諸於Windows API,更具體地使用'SetForegroundWindow()'和'GetWindow()'來解決我的問題。 – 2010-08-15 17:32:38