2011-03-09 197 views
1

在我的應用程序,當我顯示一個消息框,用戶點擊任何按鈕,如確定或取消,我的窗口失去焦點,並得到最小化。窗口失去焦點

我不得不嘗試使用設定的對焦也可以使用Win32 API的SetForegroundWindow(窗口的hWnd),以保持窗口活動。我注意到,如果在窗口後面打開了另一個應用程序,則單擊消息框按鈕後,我的應用程序窗口會失去焦點,但如果它是桌面上唯一可見的窗口,則它可以正常工作。我正在使用Windows 7,但在Win XP中也面臨同樣的問題。

我正在使用GradientForm。並顯示消息框,我使用MessageBox.Show(「消息文本」,「」,MessageBoxButtons.OK,MessageBoxIcon)。沒什麼不同。

+1

在此處發佈您的代碼。這不是一個正常的行爲。 – Shoban 2011-03-09 04:34:39

+0

你是否也使用winforms - Mdiparent? – Crimsonland 2011-03-09 04:47:33

回答

4

這種事情發生時,有沒有窗口時,消息框關閉該已啓用。 Windows不得不尋找另一個窗口來關注並從另一個應用程序中選擇一個窗口。也解釋了爲什麼當沒有其他窗口時這不是問題。

確保您不要禁用你的窗戶。換句話說,避免這種情況:

this.Enabled = false; 
    MessageBox.Show("oops"); 
    this.Enabled = true; 

設置啓用回到這樣就太遲了。

+0

精細的解釋。但我檢查了void WndProc(ref message message) const int WM_KILLFOCUS = 0x0008; case WM_KILLFOCUS: this.Enabled = true; this.Activate(); return; }但是同樣的問題 – 2011-03-09 05:52:18

+0

WM_KILLFOCUS無法解決這個問題,它會在你失去焦點時發送。換句話說,當顯示消息框時。 WM_SETFOCUS也無法解決它,你不會回到焦點。只是不要混淆Enabled屬性。這是沒有必要的,消息框是模態的。 – 2011-03-09 15:52:32

+0

那我應該怎麼做? – 2011-03-10 07:36:01

0

我使用setForgroundwindow()顯示對話框,現在每一件事工作正常之前解決了這個問題通過激活窗口。

0

請確保您沒有顯示在窗體加載事件的消息框。因爲那時候,窗口還沒有初始化。

而是使用窗體的顯示事件。這將解決此問題