2010-06-04 49 views
1

我偶然發現了一個奇怪的MFC問題。我有一個對話框,如果它有效,我會檢查ON_EN_KILLFOCUS上的每個編輯字段。如果驗證不通過,我將焦點設置回來並顯示錯誤消息。這很好,只要我會關閉對話框。我的意思是,如果我錯誤地輸入了字段並按下了關閉按鈕或X,則在其他處理事件之後,首先調用ON_EN_KILLFOCUS,因爲消息出現並且焦點返回到字段。所以我的問題:有沒有辦法在ON_EN_KILLFOCUS找出哪個事件會在它後面?如果是,那麼我可以檢查它的關閉事件,然後關閉對話框,而不是將我的焦點返回到錯誤地輸入的編輯字段。任何幫助將是如此多的幫助!有沒有辦法找出哪個第二個事件會發生在MFC中

回答

2

通常,您無法知道焦點更改事件後會發生什麼事件。

然而,就可以解決這個問題,你改變的條件時,驗證邏輯被觸發 - 驗證編輯控件時

  • 丟失焦點
  • 和焦點輸給了另一個編輯控件

通過檢查焦點是否丟失到另一個控件,您對用戶說:「不要移動到此組件 - 您尚未正確填寫當前的組件!」。

它捕捉用戶的意圖比驗證任何焦點更改更好。當用戶點擊關閉或系統X按鈕或任何其他按鈕時,它也不會運行驗證。 當然,當點擊確定按鈕時,您將需要添加顯式驗證。這個代碼非常簡單(檢查新的焦點窗口是對話框的子項,並且是一個輸入組件 - 您可以通過查看窗口的窗口類名稱來確定它是輸入組件)。 )

這也涉及用戶因爲其他原因(例如系統消息框或其他焦點抓取事件)而移動焦點的情況。由於焦點並未轉移到其他編輯控件之一,因此驗證不會運行,焦點不會被強制回到您的應用程序,這對某些人來說可能很煩人!

相關問題