2014-11-06 43 views
1

是否有某種方法檢測是否存在顯示在我的VB6應用程序中的模態窗體。檢測是否有模態窗體顯示

我想顯示另一個表單,如果有一個模態窗體顯示和模式,如果沒有模態窗體顯示。

我知道我可以做一些錯誤處理來檢測這一點,並表示如果有模式發生錯誤:

Public Sub ShowFormModeless(frm As Form, Optional ownerForm As Form = Nothing) 
    On Error GoTo ShowModal 
    Call frm.Show(, ownerForm) 
    Exit Sub 
ShowModal: 
    Call frm.Show(vbModal, ownerForm) 
End Sub 

但我希望能夠檢測到這種不被拋出的錯誤。

+0

這使得一個有趣的閱讀,但它表明它不可能http://www.vbforums.com/showthread.php?723669-Detect-modal-form – Fred 2014-11-06 10:40:10

回答

1

嘗試檢查App.NonModalAllowed。請注意,此屬性無法檢測到從其他模塊(不包括當前模塊)項目中顯示的模態窗體,即如果您的應用程序由主可執行文件和多個ActiveX dll組成,則每個項目將具有單獨的App對象和Forms集合。

結果是,如果一個dll顯示一個模態窗體,只會標記其自己的項目App.NonModalAllowed。所以再一次,App.NonModalAllowed不是一個進程範圍的標誌,而是一個項目。

請注意,這個標誌只跟蹤VB6窗體,所以如果你使用API​​對話框(打開/保存文件,顏色選擇器等),這不會進入VB6運行時的模態循環,所以沒有任何標記。

如果您的應用程序是一個單一的exe,那麼使用此標誌按預期工作。

+0

謝謝 - 這種方法似乎並沒有返回正確的值爲即使在三種形式的測試項目中,我也是如此。 – 2014-11-07 11:25:34

相關問題